library(readxl)
library(mosaic)
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio
Registered S3 method overwritten by 'mosaic':
  method                           from   
  fortify.SpatialPolygonsDataFrame ggplot2

The 'mosaic' package masks several functions from core packages in order to add 
additional features.  The original behavior of these functions should not be affected by this.

Attaching package: ‘mosaic’

The following objects are masked from ‘package:dplyr’:

    count, do, tally

The following object is masked from ‘package:Matrix’:

    mean

The following object is masked from ‘package:ggplot2’:

    stat

The following objects are masked from ‘package:stats’:

    binom.test, cor, cor.test, cov, fivenum, IQR, median, prop.test, quantile, sd, t.test, var

The following objects are masked from ‘package:base’:

    max, mean, min, prod, range, sample, sum
library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      
-- Attaching packages ---------------------------------------------------------------------------------------------- tidyverse 1.3.1 --
√ tibble  3.1.6     √ purrr   0.3.4
√ tidyr   1.2.0     √ stringr 1.4.0
√ readr   2.1.2     √ forcats 0.5.1
-- Conflicts ------------------------------------------------------------------------------------------------- tidyverse_conflicts() --
x mosaic::count()            masks dplyr::count()
x purrr::cross()             masks mosaic::cross()
x mosaic::do()               masks dplyr::do()
x tidyr::expand()            masks Matrix::expand()
x dplyr::filter()            masks stats::filter()
x ggstance::geom_errorbarh() masks ggplot2::geom_errorbarh()
x dplyr::lag()               masks stats::lag()
x tidyr::pack()              masks Matrix::pack()
x mosaic::stat()             masks ggplot2::stat()
x mosaic::tally()            masks dplyr::tally()
x tidyr::unpack()            masks Matrix::unpack()
library(tibble)
library(matrixStats)

Attaching package: ‘matrixStats’

The following objects are masked from ‘package:mosaic’:

    count, iqr

The following object is masked from ‘package:dplyr’:

    count
Shipments <- read_excel("Shipments.xls", col_names = FALSE)
New names:
* `` -> ...1
* `` -> ...2
* `` -> ...3
* `` -> ...4
* `` -> ...5
* ...
NewOrders <- read_excel("NewOrders.xls", col_names = FALSE)
New names:
* `` -> ...1
* `` -> ...2
* `` -> ...3
* `` -> ...4
* `` -> ...5
* ...
UnfilledOrders <- read_excel("UnfilledOrders.xls", col_names = FALSE)
New names:
* `` -> ...1
* `` -> ...2
* `` -> ...3
* `` -> ...4
* `` -> ...5
* ...
TotalInventories <- read_excel("TotalInventories.xls", col_names = FALSE)
New names:
* `` -> ...1
* `` -> ...2
* `` -> ...3
* `` -> ...4
* `` -> ...5
* ...
InventoriesToShipments <- read_excel("InventoriesToShipments.xls", col_names = FALSE)
New names:
* `` -> ...1
* `` -> ...2
* `` -> ...3
* `` -> ...4
* `` -> ...5
* ...
UnfilledOrdersToShipments <- read_excel("UnfilledOrdersToShipments.xls", col_names = FALSE)
New names:
* `` -> ...1
* `` -> ...2
* `` -> ...3
* `` -> ...4
* `` -> ...5
* ...
shipments_industry_code_list <- as.array(unique(Shipments$...1))
shipments_dataframe <- tibble(.rows = 360)
for (i in 1:length(shipments_industry_code_list))
{
  current_code <- shipments_industry_code_list[i]
  current_industry <- Shipments %>% filter(Shipments$...1 == current_code, Shipments$...2 != "2022") %>% select(3:14)
  current_industry_transpose <- as.list(t(current_industry))
  for (j in 1:length(current_industry_transpose))
  {
    shipments_dataframe[j,i] = current_industry_transpose[j]
  }
  shipments_dataframe[i] <- sapply(shipments_dataframe[i],as.numeric)
}
colnames(shipments_dataframe) = shipments_industry_code_list
dates <- seq(from = as.Date("1992/01/01"), to = as.Date("2021/12/01"), by = "months")
dates2 <- format(dates, "%m/%y")
shipments_dataframe_time <- shipments_dataframe %>% add_column(Date = dates2)
head(shipments_dataframe_time,12)
neworders_industry_code_list <- as.array(unique(NewOrders$...1))
neworders_dataframe <- tibble(.rows = 360)
for (i in 1:length(neworders_industry_code_list))
{
  current_code <- neworders_industry_code_list[i]
  current_industry <- NewOrders %>% filter(NewOrders$...1 == current_code, NewOrders$...2 != "2022") %>% select(3:14)
  current_industry_transpose <- as.list(t(current_industry))
  for (j in 1:length(current_industry_transpose))
  {
    neworders_dataframe[j,i] = current_industry_transpose[j]
  }
  neworders_dataframe[i] <- sapply(neworders_dataframe[i],as.numeric)
}
colnames(neworders_dataframe) = neworders_industry_code_list
dates <- seq(from = as.Date("1992/01/01"), to = as.Date("2021/12/01"), by = "months")
dates2 <- format(dates, "%m/%y")
neworders_dataframe_time <- neworders_dataframe %>% add_column(Date = dates2)
head(neworders_dataframe_time,12)
unfilledorders_industry_code_list <- as.array(unique(UnfilledOrders$...1))
unfilledorders_dataframe <- tibble(.rows = 360)
for (i in 1:length(unfilledorders_industry_code_list))
{
  current_code <- unfilledorders_industry_code_list[i]
  current_industry <- UnfilledOrders %>% filter(UnfilledOrders$...1 == current_code, UnfilledOrders$...2 != "2022") %>% select(3:14)
  current_industry_transpose <- as.list(t(current_industry))
  for (j in 1:length(current_industry_transpose))
  {
    unfilledorders_dataframe[j,i] = current_industry_transpose[j]
  }
  unfilledorders_dataframe[i] <- sapply(unfilledorders_dataframe[i],as.numeric)
}
colnames(unfilledorders_dataframe) = unfilledorders_industry_code_list
dates <- seq(from = as.Date("1992/01/01"), to = as.Date("2021/12/01"), by = "months")
dates2 <- format(dates, "%m/%y")
unfilledorders_dataframe_time <- unfilledorders_dataframe %>% add_column(Date = dates2)
head(unfilledorders_dataframe_time,12)
totalinventories_industry_code_list <- as.array(unique(TotalInventories$...1))
totalinventories_dataframe <- tibble(.rows = 360)
for (i in 1:length(totalinventories_industry_code_list))
{
  current_code <- totalinventories_industry_code_list[i]
  current_industry <- TotalInventories %>% filter(TotalInventories$...1 == current_code, TotalInventories$...2 != "2022") %>% select(3:14)
  current_industry_transpose <- as.list(t(current_industry))
  for (j in 1:length(current_industry_transpose))
  {
    totalinventories_dataframe[j,i] = current_industry_transpose[j]
  }
  totalinventories_dataframe[i] <- sapply(totalinventories_dataframe[i],as.numeric)
}
colnames(totalinventories_dataframe) = totalinventories_industry_code_list
dates <- seq(from = as.Date("1992/01/01"), to = as.Date("2021/12/01"), by = "months")
dates2 <- format(dates, "%m/%y")
totalinventories_dataframe_time <- totalinventories_dataframe %>% add_column(Date = dates2)
head(totalinventories_dataframe_time,12)
inventoriestoshipments_industry_code_list <- as.array(unique(InventoriesToShipments$...1))
inventoriestoshipments_dataframe <- tibble(.rows = 360)
for (i in 1:length(inventoriestoshipments_industry_code_list))
{
  current_code <- inventoriestoshipments_industry_code_list[i]
  current_industry <- InventoriesToShipments %>% filter(InventoriesToShipments$...1 == current_code, InventoriesToShipments$...2 != "2022") %>% select(3:14)
  current_industry_transpose <- as.list(t(current_industry))
  for (j in 1:length(current_industry_transpose))
  {
    inventoriestoshipments_dataframe[j,i] = current_industry_transpose[j]
  }
  inventoriestoshipments_dataframe[i] <- sapply(inventoriestoshipments_dataframe[i],as.numeric)
}
colnames(inventoriestoshipments_dataframe) = inventoriestoshipments_industry_code_list
dates <- seq(from = as.Date("1992/01/01"), to = as.Date("2021/12/01"), by = "months")
dates2 <- format(dates, "%m/%y")
inventoriestoshipments_dataframe_time <- inventoriestoshipments_dataframe %>% add_column(Date = dates2)
head(inventoriestoshipments_dataframe_time,12)
unfilledorderstoshipments_industry_code_list <- as.array(unique(UnfilledOrdersToShipments$...1))
unfilledorderstoshipments_dataframe <- tibble(.rows = 360)
for (i in 1:length(unfilledorderstoshipments_industry_code_list))
{
  current_code <- unfilledorderstoshipments_industry_code_list[i]
  current_industry <- UnfilledOrdersToShipments %>% filter(UnfilledOrdersToShipments$...1 == current_code, UnfilledOrdersToShipments$...2 != "2022") %>% select(3:14)
  current_industry_transpose <- as.list(t(current_industry))
  for (j in 1:length(current_industry_transpose))
  {
    unfilledorderstoshipments_dataframe[j,i] = current_industry_transpose[j]
  }
  unfilledorderstoshipments_dataframe[i] <- sapply(unfilledorderstoshipments_dataframe[i],as.numeric)
}
colnames(unfilledorderstoshipments_dataframe) = unfilledorderstoshipments_industry_code_list
dates <- seq(from = as.Date("1992/01/01"), to = as.Date("2021/12/01"), by = "months")
dates2 <- format(dates, "%m/%y")
unfilledorderstoshipments_dataframe_time <- unfilledorderstoshipments_dataframe %>% add_column(Date = dates2)
head(unfilledorderstoshipments_dataframe_time,12)
mean_row_ship <- colMeans(shipments_dataframe_time[sapply(shipments_dataframe_time, is.numeric)],na.rm = TRUE)
median_row_ship <- colMedians(as.matrix(shipments_dataframe_time[sapply(shipments_dataframe_time, is.numeric)]),na.rm = TRUE)
sd_row_ship <- colSds(as.matrix(shipments_dataframe_time[sapply(shipments_dataframe_time, is.numeric)]),na.rm = TRUE)
shipments_mmv1 <- shipments_dataframe_time %>% rbind(shipments_dataframe_time, mean_row_ship)
shipments_mmv2 <- shipments_mmv1 %>% rbind(shipments_mmv1, median_row_ship)
shipments_mmv <- shipments_mmv2 %>% rbind(shipments_mmv2, sd_row_ship)
shipments_mmv[nrow(shipments_mmv)-2,ncol(shipments_mmv)] <- "Mean"
shipments_mmv[nrow(shipments_mmv)-1,ncol(shipments_mmv)] <- "Median"
shipments_mmv[nrow(shipments_mmv),ncol(shipments_mmv)] <- "Standard Deviation"
tail(shipments_mmv,10)
mean_row_neword <- colMeans(neworders_dataframe_time[sapply(neworders_dataframe_time, is.numeric)],na.rm = TRUE)
median_row_neword <- colMedians(as.matrix(neworders_dataframe_time[sapply(neworders_dataframe_time, is.numeric)]),na.rm = TRUE)
sd_row_neword <- colSds(as.matrix(neworders_dataframe_time[sapply(neworders_dataframe_time, is.numeric)]),na.rm = TRUE)
neworders_mmv1 <- neworders_dataframe_time %>% rbind(neworders_dataframe_time, mean_row_neword)
neworders_mmv2 <- neworders_mmv1 %>% rbind(neworders_mmv1, median_row_neword)
neworders_mmv <- neworders_mmv2 %>% rbind(neworders_mmv2, sd_row_neword)
neworders_mmv[nrow(neworders_mmv)-2,ncol(neworders_mmv)] <- "Mean"
neworders_mmv[nrow(neworders_mmv)-1,ncol(neworders_mmv)] <- "Median"
neworders_mmv[nrow(neworders_mmv),ncol(neworders_mmv)] <- "Standard Deviation"
tail(neworders_mmv,10)
mean_row_unfillord <- colMeans(unfilledorders_dataframe_time[sapply(unfilledorders_dataframe_time, is.numeric)],na.rm = TRUE)
median_row_unfillord <- colMedians(as.matrix(unfilledorders_dataframe_time[sapply(unfilledorders_dataframe_time, is.numeric)]),na.rm = TRUE)
sd_row_unfillord <- colSds(as.matrix(unfilledorders_dataframe_time[sapply(unfilledorders_dataframe_time, is.numeric)]),na.rm = TRUE)
unfillord_mmv1 <- unfilledorders_dataframe_time %>% rbind(unfilledorders_dataframe_time, mean_row_unfillord)
unfillord_mmv2 <- unfillord_mmv1 %>% rbind(unfillord_mmv1, median_row_unfillord)
unfillord_mmv <- unfillord_mmv2 %>% rbind(unfillord_mmv2, sd_row_unfillord)
unfillord_mmv[nrow(unfillord_mmv)-2,ncol(unfillord_mmv)] <- "Mean"
unfillord_mmv[nrow(unfillord_mmv)-1,ncol(unfillord_mmv)] <- "Median"
unfillord_mmv[nrow(unfillord_mmv),ncol(unfillord_mmv)] <- "Standard Deviation"
tail(unfillord_mmv,10)
mean_row_totalinv <- colMeans(totalinventories_dataframe_time[sapply(totalinventories_dataframe_time, is.numeric)],na.rm = TRUE)
median_row_totalinv <- colMedians(as.matrix(totalinventories_dataframe_time[sapply(totalinventories_dataframe_time, is.numeric)]),na.rm = TRUE)
sd_row_totalinv <- colSds(as.matrix(totalinventories_dataframe_time[sapply(totalinventories_dataframe_time, is.numeric)]),na.rm = TRUE)
totalinv_mmv1 <- totalinventories_dataframe_time %>% rbind(totalinventories_dataframe_time, mean_row_totalinv)
totalinv_mmv2 <- totalinv_mmv1 %>% rbind(totalinv_mmv1, median_row_totalinv)
totalinv_mmv <- totalinv_mmv2 %>% rbind(totalinv_mmv2, sd_row_totalinv)
totalinv_mmv[nrow(totalinv_mmv)-2,ncol(totalinv_mmv)] <- "Mean"
totalinv_mmv[nrow(totalinv_mmv)-1,ncol(totalinv_mmv)] <- "Median"
totalinv_mmv[nrow(totalinv_mmv),ncol(totalinv_mmv)] <- "Standard Deviation"
tail(totalinv_mmv,10)
mean_row_invtoship <- colMeans(inventoriestoshipments_dataframe_time[sapply(inventoriestoshipments_dataframe_time, is.numeric)],na.rm = TRUE)
median_row_invtoship <- colMedians(as.matrix(inventoriestoshipments_dataframe_time[sapply(inventoriestoshipments_dataframe_time, is.numeric)]),na.rm = TRUE)
sd_row_invtoship <- colSds(as.matrix(inventoriestoshipments_dataframe_time[sapply(inventoriestoshipments_dataframe_time, is.numeric)]),na.rm = TRUE)
invtoship_mmv1 <- inventoriestoshipments_dataframe_time %>% rbind(inventoriestoshipments_dataframe_time, mean_row_invtoship)
invtoship_mmv2 <- invtoship_mmv1 %>% rbind(invtoship_mmv1, median_row_invtoship)
invtoship_mmv <- invtoship_mmv2 %>% rbind(invtoship_mmv2, sd_row_invtoship)
invtoship_mmv[nrow(invtoship_mmv)-2,ncol(invtoship_mmv)] <- "Mean"
invtoship_mmv[nrow(invtoship_mmv)-1,ncol(invtoship_mmv)] <- "Median"
invtoship_mmv[nrow(invtoship_mmv),ncol(invtoship_mmv)] <- "Standard Deviation"
tail(invtoship_mmv,10)
mean_row_unfilltoship <- colMeans(unfilledorderstoshipments_dataframe_time[sapply(unfilledorderstoshipments_dataframe_time, is.numeric)],na.rm = TRUE)
median_row_unfilltoship <- colMedians(as.matrix(unfilledorderstoshipments_dataframe_time[sapply(unfilledorderstoshipments_dataframe_time, is.numeric)]),na.rm = TRUE)
sd_row_unfilltoship <- colSds(as.matrix(unfilledorderstoshipments_dataframe_time[sapply(unfilledorderstoshipments_dataframe_time, is.numeric)]),na.rm = TRUE)
unfilltoship_mmv1 <- unfilledorderstoshipments_dataframe_time %>% rbind(unfilledorderstoshipments_dataframe_time, mean_row_unfilltoship)
unfilltoship_mmv2 <- unfilltoship_mmv1 %>% rbind(unfilltoship_mmv1, median_row_unfilltoship)
unfilltoship_mmv <- unfilltoship_mmv2 %>% rbind(unfilltoship_mmv2, sd_row_unfilltoship)
unfilltoship_mmv[nrow(unfilltoship_mmv)-2,ncol(unfilltoship_mmv)] <- "Mean"
unfilltoship_mmv[nrow(unfilltoship_mmv)-1,ncol(unfilltoship_mmv)] <- "Median"
unfilltoship_mmv[nrow(unfilltoship_mmv),ncol(unfilltoship_mmv)] <- "Standard Deviation"
tail(unfilltoship_mmv,10)
shipment_means <- shipments_mmv %>% filter(shipments_mmv$Date == "Mean") %>% select_if(. >= 300000)
shipment_means
AMTMVS <- ts(data = shipments_mmv$AMTMVS, start=c(1992), end=c(2021), frequency = 12)
AMXTVS <- ts(data = shipments_mmv$AMXTVS, start=c(1992), end=c(2021), frequency = 12)
AMXDVS <- ts(data = shipments_mmv$AMXDVS, start=c(1992), end=c(2021), frequency = 12)
ts.plot(AMTMVS, AMXTVS, AMXDVS, gpars=list(xlab="Year", ylab="Value",lty=c(1:3)), col=rep(c("red","blue","green")))
legend("topleft", legend = c("AMTMVS","AMXTVS","AMXDVS"), col = c("red","blue","green"), lty=c(1:3))

shipments_order <- order(colMeans(shipments_dataframe_time[sapply(shipments_dataframe_time, is.numeric)],na.rm = TRUE))
shipments_mmv_ordered_mean <- shipments_mmv %>% select(all_of(shipments_order), ncol(shipments_mmv))
shipments_mmv_ordered_mean_adj <- shipments_mmv_ordered_mean %>% select(starts_with('A')) #87 Columns
shipments_mmv_ordered_mean_unadj <- shipments_mmv_ordered_mean %>% select(starts_with('U')) #87 Columns
for (i in c(1,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81))
{
  Series1 <- ts(data = shipments_mmv_ordered_mean_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = shipments_mmv_ordered_mean_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = shipments_mmv_ordered_mean_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = shipments_mmv_ordered_mean_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = shipments_mmv_ordered_mean_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(shipments_mmv_ordered_mean_adj)[i],colnames(shipments_mmv_ordered_mean_adj)[i+1],colnames(shipments_mmv_ordered_mean_adj)[i+2],colnames(shipments_mmv_ordered_mean_adj)[i+3],colnames(shipments_mmv_ordered_mean_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81))
{
  Series1 <- ts(data = shipments_mmv_ordered_mean_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = shipments_mmv_ordered_mean_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = shipments_mmv_ordered_mean_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = shipments_mmv_ordered_mean_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = shipments_mmv_ordered_mean_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(shipments_mmv_ordered_mean_unadj)[i],colnames(shipments_mmv_ordered_mean_unadj)[i+1],colnames(shipments_mmv_ordered_mean_unadj)[i+2],colnames(shipments_mmv_ordered_mean_unadj)[i+3],colnames(shipments_mmv_ordered_mean_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

neworders_order <- order(colMeans(neworders_dataframe_time[sapply(neworders_dataframe_time, is.numeric)],na.rm = TRUE))
neworders_mmv_ordered_mean <- neworders_mmv %>% select(all_of(neworders_order), ncol(neworders_mmv))
neworders_mmv_ordered_mean_adj <- neworders_mmv_ordered_mean %>% select(starts_with('A')) #52 Columns
neworders_mmv_ordered_mean_unadj <- neworders_mmv_ordered_mean %>% select(starts_with('U')) #52 Columns
for (i in c(1,6,11,16,21,26,31,36,41,46))
{
  Series1 <- ts(data = neworders_mmv_ordered_mean_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = neworders_mmv_ordered_mean_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = neworders_mmv_ordered_mean_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = neworders_mmv_ordered_mean_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = neworders_mmv_ordered_mean_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(neworders_mmv_ordered_mean_adj)[i],colnames(neworders_mmv_ordered_mean_adj)[i+1],colnames(neworders_mmv_ordered_mean_adj)[i+2],colnames(neworders_mmv_ordered_mean_adj)[i+3],colnames(neworders_mmv_ordered_mean_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16,21,26,31,36,41,46))
{
  Series1 <- ts(data = neworders_mmv_ordered_mean_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = neworders_mmv_ordered_mean_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = neworders_mmv_ordered_mean_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = neworders_mmv_ordered_mean_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = neworders_mmv_ordered_mean_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(neworders_mmv_ordered_mean_unadj)[i],colnames(neworders_mmv_ordered_mean_unadj)[i+1],colnames(neworders_mmv_ordered_mean_unadj)[i+2],colnames(neworders_mmv_ordered_mean_unadj)[i+3],colnames(neworders_mmv_ordered_mean_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

unfilledorders_order <- order(colMeans(unfilledorders_dataframe_time[sapply(unfilledorders_dataframe_time, is.numeric)],na.rm = TRUE))
unfilledorders_mmv_ordered_mean <- unfillord_mmv %>% select(all_of(unfilledorders_order), ncol(unfillord_mmv))
unfilledorders_mmv_ordered_mean_adj <- unfilledorders_mmv_ordered_mean %>% select(starts_with('A')) #50 Columns
unfilledorders_mmv_ordered_mean_unadj <- unfilledorders_mmv_ordered_mean %>% select(starts_with('U')) #52 Columns
for (i in c(1,6,11,16,21,26,31,36,41,46))
{
  Series1 <- ts(data = unfilledorders_mmv_ordered_mean_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = unfilledorders_mmv_ordered_mean_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = unfilledorders_mmv_ordered_mean_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = unfilledorders_mmv_ordered_mean_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = unfilledorders_mmv_ordered_mean_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(unfilledorders_mmv_ordered_mean_adj)[i],colnames(unfilledorders_mmv_ordered_mean_adj)[i+1],colnames(unfilledorders_mmv_ordered_mean_adj)[i+2],colnames(unfilledorders_mmv_ordered_mean_adj)[i+3],colnames(unfilledorders_mmv_ordered_mean_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16,21,26,31,36,41,46))
{
  Series1 <- ts(data = unfilledorders_mmv_ordered_mean_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = unfilledorders_mmv_ordered_mean_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = unfilledorders_mmv_ordered_mean_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = unfilledorders_mmv_ordered_mean_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = unfilledorders_mmv_ordered_mean_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(unfilledorders_mmv_ordered_mean_unadj)[i],colnames(unfilledorders_mmv_ordered_mean_unadj)[i+1],colnames(unfilledorders_mmv_ordered_mean_unadj)[i+2],colnames(unfilledorders_mmv_ordered_mean_unadj)[i+3],colnames(unfilledorders_mmv_ordered_mean_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

totalinv_order <- order(colMeans(totalinventories_dataframe_time[sapply(totalinventories_dataframe_time, is.numeric)],na.rm = TRUE))
totalinv_mmv_ordered_mean <- totalinv_mmv %>% select(all_of(totalinv_order), ncol(totalinv_mmv))
totalinv_mmv_ordered_mean_adj <- totalinv_mmv_ordered_mean %>% select(starts_with('A')) #158 Columns
totalinv_mmv_ordered_mean_unadj <- totalinv_mmv_ordered_mean %>% select(starts_with('U')) #158 Columns
for (i in c(1,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81,86,91,96,101,106,111,116,121,126,131,136,141,146,151))
{
  Series1 <- ts(data = totalinv_mmv_ordered_mean_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = totalinv_mmv_ordered_mean_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = totalinv_mmv_ordered_mean_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = totalinv_mmv_ordered_mean_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = totalinv_mmv_ordered_mean_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(totalinv_mmv_ordered_mean_adj)[i],colnames(totalinv_mmv_ordered_mean_adj)[i+1],colnames(totalinv_mmv_ordered_mean_adj)[i+2],colnames(totalinv_mmv_ordered_mean_adj)[i+3],colnames(totalinv_mmv_ordered_mean_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81,86,91,96,101,106,111,116,121,126,131,136,141,146,151))
{
  Series1 <- ts(data = totalinv_mmv_ordered_mean_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = totalinv_mmv_ordered_mean_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = totalinv_mmv_ordered_mean_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = totalinv_mmv_ordered_mean_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = totalinv_mmv_ordered_mean_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(totalinv_mmv_ordered_mean_unadj)[i],colnames(totalinv_mmv_ordered_mean_unadj)[i+1],colnames(totalinv_mmv_ordered_mean_unadj)[i+2],colnames(totalinv_mmv_ordered_mean_unadj)[i+3],colnames(totalinv_mmv_ordered_mean_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

invtoship_order <- order(colMeans(inventoriestoshipments_dataframe_time[sapply(inventoriestoshipments_dataframe_time, is.numeric)],na.rm = TRUE))
invtoship_mmv_ordered_mean <- invtoship_mmv %>% select(all_of(invtoship_order), ncol(invtoship_mmv))
invtoship_mmv_ordered_mean_adj <- invtoship_mmv_ordered_mean %>% select(starts_with('A')) #24 Columns
invtoship_mmv_ordered_mean_unadj <- invtoship_mmv_ordered_mean %>% select(starts_with('U')) #24 Columns
for (i in c(1,6,11,16))
{
  Series1 <- ts(data = invtoship_mmv_ordered_mean_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = invtoship_mmv_ordered_mean_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = invtoship_mmv_ordered_mean_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = invtoship_mmv_ordered_mean_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = invtoship_mmv_ordered_mean_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(invtoship_mmv_ordered_mean_adj)[i],colnames(invtoship_mmv_ordered_mean_adj)[i+1],colnames(invtoship_mmv_ordered_mean_adj)[i+2],colnames(invtoship_mmv_ordered_mean_adj)[i+3],colnames(invtoship_mmv_ordered_mean_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16))
{
  Series1 <- ts(data = invtoship_mmv_ordered_mean_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = invtoship_mmv_ordered_mean_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = invtoship_mmv_ordered_mean_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = invtoship_mmv_ordered_mean_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = invtoship_mmv_ordered_mean_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(invtoship_mmv_ordered_mean_unadj)[i],colnames(invtoship_mmv_ordered_mean_unadj)[i+1],colnames(invtoship_mmv_ordered_mean_unadj)[i+2],colnames(invtoship_mmv_ordered_mean_unadj)[i+3],colnames(invtoship_mmv_ordered_mean_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

unfilltoship_order <- order(colMeans(unfilledorderstoshipments_dataframe_time[sapply(unfilledorderstoshipments_dataframe_time, is.numeric)],na.rm = TRUE))
unfilltoship_mmv_ordered_mean <- unfilltoship_mmv %>% select(all_of(unfilltoship_order), ncol(unfilltoship_mmv))
unfilltoship_mmv_ordered_mean_adj <- unfilltoship_mmv_ordered_mean %>% select(starts_with('A')) #9 Columns
unfilltoship_mmv_ordered_mean_unadj <- unfilltoship_mmv_ordered_mean %>% select(starts_with('U')) #9 Columns
for (i in c(1))
{
  Series1 <- ts(data = unfilltoship_mmv_ordered_mean_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = unfilltoship_mmv_ordered_mean_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = unfilltoship_mmv_ordered_mean_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = unfilltoship_mmv_ordered_mean_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = unfilltoship_mmv_ordered_mean_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(unfilltoship_mmv_ordered_mean_adj)[i],colnames(unfilltoship_mmv_ordered_mean_adj)[i+1],colnames(unfilltoship_mmv_ordered_mean_adj)[i+2],colnames(unfilltoship_mmv_ordered_mean_adj)[i+3],colnames(unfilltoship_mmv_ordered_mean_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1))
{
  Series1 <- ts(data = unfilltoship_mmv_ordered_mean_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = unfilltoship_mmv_ordered_mean_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = unfilltoship_mmv_ordered_mean_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = unfilltoship_mmv_ordered_mean_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = unfilltoship_mmv_ordered_mean_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(unfilltoship_mmv_ordered_mean_unadj)[i],colnames(unfilltoship_mmv_ordered_mean_unadj)[i+1],colnames(unfilltoship_mmv_ordered_mean_unadj)[i+2],colnames(unfilltoship_mmv_ordered_mean_unadj)[i+3],colnames(unfilltoship_mmv_ordered_mean_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

shipments_order_med <- order(colMedians(as.matrix(shipments_dataframe_time[sapply(shipments_dataframe_time, is.numeric)]),na.rm = TRUE))
shipments_mmv_ordered_median <- shipments_mmv %>% select(all_of(shipments_order_med), ncol(shipments_mmv))
shipments_mmv_ordered_median_adj <- shipments_mmv_ordered_median %>% select(starts_with('A')) #87 Columns
shipments_mmv_ordered_median_unadj <- shipments_mmv_ordered_median %>% select(starts_with('U')) #87 Columns
for (i in c(1,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81))
{
  Series1 <- ts(data = shipments_mmv_ordered_median_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = shipments_mmv_ordered_median_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = shipments_mmv_ordered_median_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = shipments_mmv_ordered_median_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = shipments_mmv_ordered_median_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(shipments_mmv_ordered_median_adj)[i],colnames(shipments_mmv_ordered_median_adj)[i+1],colnames(shipments_mmv_ordered_median_adj)[i+2],colnames(shipments_mmv_ordered_median_adj)[i+3],colnames(shipments_mmv_ordered_median_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81))
{
  Series1 <- ts(data = shipments_mmv_ordered_median_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = shipments_mmv_ordered_median_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = shipments_mmv_ordered_median_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = shipments_mmv_ordered_median_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = shipments_mmv_ordered_median_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(shipments_mmv_ordered_median_unadj)[i],colnames(shipments_mmv_ordered_median_unadj)[i+1],colnames(shipments_mmv_ordered_median_unadj)[i+2],colnames(shipments_mmv_ordered_median_unadj)[i+3],colnames(shipments_mmv_ordered_median_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

neworders_order_med <- order(colMeans(as.matrix(neworders_dataframe_time[sapply(neworders_dataframe_time, is.numeric)]),na.rm = TRUE))
neworders_mmv_ordered_median <- neworders_mmv %>% select(all_of(neworders_order_med), ncol(neworders_mmv))
neworders_mmv_ordered_median_adj <- neworders_mmv_ordered_median %>% select(starts_with('A')) #52 Columns
neworders_mmv_ordered_median_unadj <- neworders_mmv_ordered_median %>% select(starts_with('U')) #52 Columns
for (i in c(1,6,11,16,21,26,31,36,41,46))
{
  Series1 <- ts(data = neworders_mmv_ordered_median_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = neworders_mmv_ordered_median_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = neworders_mmv_ordered_median_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = neworders_mmv_ordered_median_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = neworders_mmv_ordered_median_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(neworders_mmv_ordered_median_adj)[i],colnames(neworders_mmv_ordered_median_adj)[i+1],colnames(neworders_mmv_ordered_median_adj)[i+2],colnames(neworders_mmv_ordered_median_adj)[i+3],colnames(neworders_mmv_ordered_median_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16,21,26,31,36,41,46))
{
  Series1 <- ts(data = neworders_mmv_ordered_median_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = neworders_mmv_ordered_median_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = neworders_mmv_ordered_median_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = neworders_mmv_ordered_median_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = neworders_mmv_ordered_median_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(neworders_mmv_ordered_median_unadj)[i],colnames(neworders_mmv_ordered_median_unadj)[i+1],colnames(neworders_mmv_ordered_median_unadj)[i+2],colnames(neworders_mmv_ordered_median_unadj)[i+3],colnames(neworders_mmv_ordered_median_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

unfilledorders_order_med <- order(colMedians(as.matrix(unfilledorders_dataframe_time[sapply(unfilledorders_dataframe_time, is.numeric)]),na.rm = TRUE))
unfilledorders_mmv_ordered_median <- unfillord_mmv %>% select(all_of(unfilledorders_order_med), ncol(unfillord_mmv))
unfilledorders_mmv_ordered_median_adj <- unfilledorders_mmv_ordered_median %>% select(starts_with('A')) #50 Columns
unfilledorders_mmv_ordered_median_unadj <- unfilledorders_mmv_ordered_median %>% select(starts_with('U')) #52 Columns
for (i in c(1,6,11,16,21,26,31,36,41,46))
{
  Series1 <- ts(data = unfilledorders_mmv_ordered_median_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = unfilledorders_mmv_ordered_median_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = unfilledorders_mmv_ordered_median_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = unfilledorders_mmv_ordered_median_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = unfilledorders_mmv_ordered_median_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(unfilledorders_mmv_ordered_median_adj)[i],colnames(unfilledorders_mmv_ordered_median_adj)[i+1],colnames(unfilledorders_mmv_ordered_median_adj)[i+2],colnames(unfilledorders_mmv_ordered_median_adj)[i+3],colnames(unfilledorders_mmv_ordered_median_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16,21,26,31,36,41,46))
{
  Series1 <- ts(data = unfilledorders_mmv_ordered_median_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = unfilledorders_mmv_ordered_median_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = unfilledorders_mmv_ordered_median_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = unfilledorders_mmv_ordered_median_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = unfilledorders_mmv_ordered_median_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(unfilledorders_mmv_ordered_median_unadj)[i],colnames(unfilledorders_mmv_ordered_median_unadj)[i+1],colnames(unfilledorders_mmv_ordered_median_unadj)[i+2],colnames(unfilledorders_mmv_ordered_median_unadj)[i+3],colnames(unfilledorders_mmv_ordered_median_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

totalinv_order_med <- order(colMedians(as.matrix(totalinventories_dataframe_time[sapply(totalinventories_dataframe_time, is.numeric)]),na.rm = TRUE))
totalinv_mmv_ordered_median <- totalinv_mmv %>% select(all_of(totalinv_order_med), ncol(totalinv_mmv))
totalinv_mmv_ordered_median_adj <- totalinv_mmv_ordered_median %>% select(starts_with('A')) #158 Columns
totalinv_mmv_ordered_median_unadj <- totalinv_mmv_ordered_median %>% select(starts_with('U')) #158 Columns
for (i in c(1,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81,86,91,96,101,106,111,116,121,126,131,136,141,146,151))
{
  Series1 <- ts(data = totalinv_mmv_ordered_median_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = totalinv_mmv_ordered_median_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = totalinv_mmv_ordered_median_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = totalinv_mmv_ordered_median_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = totalinv_mmv_ordered_median_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(totalinv_mmv_ordered_median_adj)[i],colnames(totalinv_mmv_ordered_median_adj)[i+1],colnames(totalinv_mmv_ordered_median_adj)[i+2],colnames(totalinv_mmv_ordered_median_adj)[i+3],colnames(totalinv_mmv_ordered_median_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81,86,91,96,101,106,111,116,121,126,131,136,141,146,151))
{
  Series1 <- ts(data = totalinv_mmv_ordered_median_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = totalinv_mmv_ordered_median_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = totalinv_mmv_ordered_median_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = totalinv_mmv_ordered_median_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = totalinv_mmv_ordered_median_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(totalinv_mmv_ordered_median_unadj)[i],colnames(totalinv_mmv_ordered_median_unadj)[i+1],colnames(totalinv_mmv_ordered_median_unadj)[i+2],colnames(totalinv_mmv_ordered_median_unadj)[i+3],colnames(totalinv_mmv_ordered_median_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

invtoship_order_med <- order(colMedians(as.matrix(inventoriestoshipments_dataframe_time[sapply(inventoriestoshipments_dataframe_time, is.numeric)]),na.rm = TRUE))
invtoship_mmv_ordered_median <- invtoship_mmv %>% select(all_of(invtoship_order_med), ncol(invtoship_mmv))
invtoship_mmv_ordered_median_adj <- invtoship_mmv_ordered_median %>% select(starts_with('A')) #24 Columns
invtoship_mmv_ordered_median_unadj <- invtoship_mmv_ordered_median %>% select(starts_with('U')) #24 Columns
for (i in c(1,6,11,16))
{
  Series1 <- ts(data = invtoship_mmv_ordered_median_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = invtoship_mmv_ordered_median_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = invtoship_mmv_ordered_median_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = invtoship_mmv_ordered_median_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = invtoship_mmv_ordered_median_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(invtoship_mmv_ordered_median_adj)[i],colnames(invtoship_mmv_ordered_median_adj)[i+1],colnames(invtoship_mmv_ordered_median_adj)[i+2],colnames(invtoship_mmv_ordered_median_adj)[i+3],colnames(invtoship_mmv_ordered_median_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16))
{
  Series1 <- ts(data = invtoship_mmv_ordered_median_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = invtoship_mmv_ordered_median_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = invtoship_mmv_ordered_median_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = invtoship_mmv_ordered_median_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = invtoship_mmv_ordered_median_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(invtoship_mmv_ordered_median_unadj)[i],colnames(invtoship_mmv_ordered_median_unadj)[i+1],colnames(invtoship_mmv_ordered_median_unadj)[i+2],colnames(invtoship_mmv_ordered_median_unadj)[i+3],colnames(invtoship_mmv_ordered_median_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

unfilltoship_order_med <- order(colMedians(as.matrix(unfilledorderstoshipments_dataframe_time[sapply(unfilledorderstoshipments_dataframe_time, is.numeric)]),na.rm = TRUE))
unfilltoship_mmv_ordered_median <- unfilltoship_mmv %>% select(all_of(unfilltoship_order_med), ncol(unfilltoship_mmv))
unfilltoship_mmv_ordered_median_adj <- unfilltoship_mmv_ordered_median %>% select(starts_with('A')) #9 Columns
unfilltoship_mmv_ordered_median_unadj <- unfilltoship_mmv_ordered_median %>% select(starts_with('U')) #9 Columns
for (i in c(1))
{
  Series1 <- ts(data = unfilltoship_mmv_ordered_median_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = unfilltoship_mmv_ordered_median_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = unfilltoship_mmv_ordered_median_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = unfilltoship_mmv_ordered_median_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = unfilltoship_mmv_ordered_median_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(unfilltoship_mmv_ordered_median_adj)[i],colnames(unfilltoship_mmv_ordered_median_adj)[i+1],colnames(unfilltoship_mmv_ordered_median_adj)[i+2],colnames(unfilltoship_mmv_ordered_median_adj)[i+3],colnames(unfilltoship_mmv_ordered_median_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1))
{
  Series1 <- ts(data = unfilltoship_mmv_ordered_median_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = unfilltoship_mmv_ordered_median_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = unfilltoship_mmv_ordered_median_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = unfilltoship_mmv_ordered_median_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = unfilltoship_mmv_ordered_median_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(unfilltoship_mmv_ordered_median_unadj)[i],colnames(unfilltoship_mmv_ordered_median_unadj)[i+1],colnames(unfilltoship_mmv_ordered_median_unadj)[i+2],colnames(unfilltoship_mmv_ordered_median_unadj)[i+3],colnames(unfilltoship_mmv_ordered_median_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

shipments_order_sd <- order(colSds(as.matrix(shipments_dataframe_time[sapply(shipments_dataframe_time, is.numeric)]),na.rm = TRUE))
shipments_mmv_ordered_standev <- shipments_mmv %>% select(all_of(shipments_order_sd), ncol(shipments_mmv))
shipments_mmv_ordered_standev_adj <- shipments_mmv_ordered_standev %>% select(starts_with('A')) #9 Columns
shipments_mmv_ordered_standev_unadj <- shipments_mmv_ordered_standev %>% select(starts_with('U')) #9 Columns
for (i in c(1,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81))
{
  Series1 <- ts(data = shipments_mmv_ordered_standev_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = shipments_mmv_ordered_standev_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = shipments_mmv_ordered_standev_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = shipments_mmv_ordered_standev_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = shipments_mmv_ordered_standev_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(shipments_mmv_ordered_standev_adj)[i],colnames(shipments_mmv_ordered_standev_adj)[i+1],colnames(shipments_mmv_ordered_standev_adj)[i+2],colnames(shipments_mmv_ordered_standev_adj)[i+3],colnames(shipments_mmv_ordered_standev_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81))
{
  Series1 <- ts(data = shipments_mmv_ordered_standev_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = shipments_mmv_ordered_standev_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = shipments_mmv_ordered_standev_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = shipments_mmv_ordered_standev_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = shipments_mmv_ordered_standev_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(shipments_mmv_ordered_standev_unadj)[i],colnames(shipments_mmv_ordered_standev_unadj)[i+1],colnames(shipments_mmv_ordered_standev_unadj)[i+2],colnames(shipments_mmv_ordered_standev_unadj)[i+3],colnames(shipments_mmv_ordered_standev_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

neworders_order_sd <- order(colSds(as.matrix(neworders_dataframe_time[sapply(neworders_dataframe_time, is.numeric)]),na.rm = TRUE))
neworders_mmv_ordered_standev <- neworders_mmv %>% select(all_of(neworders_order_sd), ncol(neworders_mmv))
neworders_mmv_ordered_standev_adj <- neworders_mmv_ordered_standev %>% select(starts_with('A')) #52 Columns
neworders_mmv_ordered_standev_unadj <- neworders_mmv_ordered_standev %>% select(starts_with('U')) #52 Columns
for (i in c(1,6,11,16,21,26,31,36,41,46))
{
  Series1 <- ts(data = neworders_mmv_ordered_standev_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = neworders_mmv_ordered_standev_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = neworders_mmv_ordered_standev_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = neworders_mmv_ordered_standev_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = neworders_mmv_ordered_standev_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(neworders_mmv_ordered_standev_adj)[i],colnames(neworders_mmv_ordered_standev_adj)[i+1],colnames(neworders_mmv_ordered_standev_adj)[i+2],colnames(neworders_mmv_ordered_standev_adj)[i+3],colnames(neworders_mmv_ordered_standev_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16,21,26,31,36,41,46))
{
  Series1 <- ts(data = neworders_mmv_ordered_standev_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = neworders_mmv_ordered_standev_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = neworders_mmv_ordered_standev_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = neworders_mmv_ordered_standev_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = neworders_mmv_ordered_standev_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(neworders_mmv_ordered_standev_unadj)[i],colnames(neworders_mmv_ordered_standev_unadj)[i+1],colnames(neworders_mmv_ordered_standev_unadj)[i+2],colnames(neworders_mmv_ordered_standev_unadj)[i+3],colnames(neworders_mmv_ordered_standev_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

unfilledorders_order_sd <- order(colSds(as.matrix(unfilledorders_dataframe_time[sapply(unfilledorders_dataframe_time, is.numeric)]),na.rm = TRUE))
unfilledorders_mmv_ordered_standev <- unfillord_mmv %>% select(all_of(unfilledorders_order_sd), ncol(unfillord_mmv))
unfilledorders_mmv_ordered_standev_adj <- unfilledorders_mmv_ordered_standev %>% select(starts_with('A')) #50 Columns
unfilledorders_mmv_ordered_standev_unadj <- unfilledorders_mmv_ordered_standev %>% select(starts_with('U')) #52 Columns
for (i in c(1,6,11,16,21,26,31,36,41,46))
{
  Series1 <- ts(data = unfilledorders_mmv_ordered_standev_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = unfilledorders_mmv_ordered_standev_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = unfilledorders_mmv_ordered_standev_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = unfilledorders_mmv_ordered_standev_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = unfilledorders_mmv_ordered_standev_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(unfilledorders_mmv_ordered_standev_adj)[i],colnames(unfilledorders_mmv_ordered_standev_adj)[i+1],colnames(unfilledorders_mmv_ordered_standev_adj)[i+2],colnames(unfilledorders_mmv_ordered_standev_adj)[i+3],colnames(unfilledorders_mmv_ordered_standev_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16,21,26,31,36,41,46))
{
  Series1 <- ts(data = unfilledorders_mmv_ordered_standev_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = unfilledorders_mmv_ordered_standev_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = unfilledorders_mmv_ordered_standev_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = unfilledorders_mmv_ordered_standev_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = unfilledorders_mmv_ordered_standev_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(unfilledorders_mmv_ordered_standev_unadj)[i],colnames(unfilledorders_mmv_ordered_standev_unadj)[i+1],colnames(unfilledorders_mmv_ordered_standev_unadj)[i+2],colnames(unfilledorders_mmv_ordered_standev_unadj)[i+3],colnames(unfilledorders_mmv_ordered_standev_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

totalinv_order_sd <- order(colSds(as.matrix(totalinventories_dataframe_time[sapply(totalinventories_dataframe_time, is.numeric)]),na.rm = TRUE))
totalinv_mmv_ordered_standev <- totalinv_mmv %>% select(all_of(totalinv_order_sd), ncol(totalinv_mmv))
totalinv_mmv_ordered_standev_adj <- totalinv_mmv_ordered_standev %>% select(starts_with('A')) #158 Columns
totalinv_mmv_ordered_standev_unadj <- totalinv_mmv_ordered_standev %>% select(starts_with('U')) #158 Columns
for (i in c(1,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81,86,91,96,101,106,111,116,121,126,131,136,141,146,151))
{
  Series1 <- ts(data = totalinv_mmv_ordered_standev_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = totalinv_mmv_ordered_standev_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = totalinv_mmv_ordered_standev_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = totalinv_mmv_ordered_standev_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = totalinv_mmv_ordered_standev_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(totalinv_mmv_ordered_standev_adj)[i],colnames(totalinv_mmv_ordered_standev_adj)[i+1],colnames(totalinv_mmv_ordered_standev_adj)[i+2],colnames(totalinv_mmv_ordered_standev_adj)[i+3],colnames(totalinv_mmv_ordered_standev_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81,86,91,96,101,106,111,116,121,126,131,136,141,146,151))
{
  Series1 <- ts(data = totalinv_mmv_ordered_standev_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = totalinv_mmv_ordered_standev_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = totalinv_mmv_ordered_standev_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = totalinv_mmv_ordered_standev_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = totalinv_mmv_ordered_standev_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(totalinv_mmv_ordered_standev_unadj)[i],colnames(totalinv_mmv_ordered_standev_unadj)[i+1],colnames(totalinv_mmv_ordered_standev_unadj)[i+2],colnames(totalinv_mmv_ordered_standev_unadj)[i+3],colnames(totalinv_mmv_ordered_standev_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

invtoship_order_sd <- order(colSds(as.matrix(inventoriestoshipments_dataframe_time[sapply(inventoriestoshipments_dataframe_time, is.numeric)]),na.rm = TRUE))
invtoship_mmv_ordered_standev <- invtoship_mmv %>% select(all_of(invtoship_order_sd), ncol(invtoship_mmv))
invtoship_mmv_ordered_standev_adj <- invtoship_mmv_ordered_standev %>% select(starts_with('A')) #24 Columns
invtoship_mmv_ordered_standev_unadj <- invtoship_mmv_ordered_standev %>% select(starts_with('U')) #24 Columns
for (i in c(1,6,11,16))
{
  Series1 <- ts(data = invtoship_mmv_ordered_standev_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = invtoship_mmv_ordered_standev_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = invtoship_mmv_ordered_standev_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = invtoship_mmv_ordered_standev_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = invtoship_mmv_ordered_standev_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(invtoship_mmv_ordered_standev_adj)[i],colnames(invtoship_mmv_ordered_standev_adj)[i+1],colnames(invtoship_mmv_ordered_standev_adj)[i+2],colnames(invtoship_mmv_ordered_standev_adj)[i+3],colnames(invtoship_mmv_ordered_standev_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16))
{
  Series1 <- ts(data = invtoship_mmv_ordered_standev_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = invtoship_mmv_ordered_standev_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = invtoship_mmv_ordered_standev_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = invtoship_mmv_ordered_standev_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = invtoship_mmv_ordered_standev_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(invtoship_mmv_ordered_standev_unadj)[i],colnames(invtoship_mmv_ordered_standev_unadj)[i+1],colnames(invtoship_mmv_ordered_standev_unadj)[i+2],colnames(invtoship_mmv_ordered_standev_unadj)[i+3],colnames(invtoship_mmv_ordered_standev_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

unfilltoship_order_sd <- order(colSds(as.matrix(unfilledorderstoshipments_dataframe_time[sapply(unfilledorderstoshipments_dataframe_time, is.numeric)]),na.rm = TRUE))
unfilltoship_mmv_ordered_standev <- unfilltoship_mmv %>% select(all_of(unfilltoship_order_sd), ncol(unfilltoship_mmv))
unfilltoship_mmv_ordered_standev_adj <- unfilltoship_mmv_ordered_standev %>% select(starts_with('A')) #9 Columns
unfilltoship_mmv_ordered_standev_unadj <- unfilltoship_mmv_ordered_standev %>% select(starts_with('U')) #9 Columns
for (i in c(1))
{
  Series1 <- ts(data = unfilltoship_mmv_ordered_standev_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = unfilltoship_mmv_ordered_standev_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = unfilltoship_mmv_ordered_standev_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = unfilltoship_mmv_ordered_standev_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = unfilltoship_mmv_ordered_standev_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(unfilltoship_mmv_ordered_standev_adj)[i],colnames(unfilltoship_mmv_ordered_standev_adj)[i+1],colnames(unfilltoship_mmv_ordered_standev_adj)[i+2],colnames(unfilltoship_mmv_ordered_standev_adj)[i+3],colnames(unfilltoship_mmv_ordered_standev_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1))
{
  Series1 <- ts(data = unfilltoship_mmv_ordered_standev_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = unfilltoship_mmv_ordered_standev_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = unfilltoship_mmv_ordered_standev_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = unfilltoship_mmv_ordered_standev_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = unfilltoship_mmv_ordered_standev_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(unfilltoship_mmv_ordered_standev_unadj)[i],colnames(unfilltoship_mmv_ordered_standev_unadj)[i+1],colnames(unfilltoship_mmv_ordered_standev_unadj)[i+2],colnames(unfilltoship_mmv_ordered_standev_unadj)[i+3],colnames(unfilltoship_mmv_ordered_standev_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6DQogIHdvcmRfZG9jdW1lbnQ6IGRlZmF1bHQNCiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdA0KLS0tDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KG1vc2FpYykNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeSh0aWJibGUpDQpsaWJyYXJ5KG1hdHJpeFN0YXRzKQ0KU2hpcG1lbnRzIDwtIHJlYWRfZXhjZWwoIlNoaXBtZW50cy54bHMiLCBjb2xfbmFtZXMgPSBGQUxTRSkNCk5ld09yZGVycyA8LSByZWFkX2V4Y2VsKCJOZXdPcmRlcnMueGxzIiwgY29sX25hbWVzID0gRkFMU0UpDQpVbmZpbGxlZE9yZGVycyA8LSByZWFkX2V4Y2VsKCJVbmZpbGxlZE9yZGVycy54bHMiLCBjb2xfbmFtZXMgPSBGQUxTRSkNClRvdGFsSW52ZW50b3JpZXMgPC0gcmVhZF9leGNlbCgiVG90YWxJbnZlbnRvcmllcy54bHMiLCBjb2xfbmFtZXMgPSBGQUxTRSkNCkludmVudG9yaWVzVG9TaGlwbWVudHMgPC0gcmVhZF9leGNlbCgiSW52ZW50b3JpZXNUb1NoaXBtZW50cy54bHMiLCBjb2xfbmFtZXMgPSBGQUxTRSkNClVuZmlsbGVkT3JkZXJzVG9TaGlwbWVudHMgPC0gcmVhZF9leGNlbCgiVW5maWxsZWRPcmRlcnNUb1NoaXBtZW50cy54bHMiLCBjb2xfbmFtZXMgPSBGQUxTRSkNCmBgYA0KYGBge3J9DQpzaGlwbWVudHNfaW5kdXN0cnlfY29kZV9saXN0IDwtIGFzLmFycmF5KHVuaXF1ZShTaGlwbWVudHMkLi4uMSkpDQpzaGlwbWVudHNfZGF0YWZyYW1lIDwtIHRpYmJsZSgucm93cyA9IDM2MCkNCmBgYA0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KZm9yIChpIGluIDE6bGVuZ3RoKHNoaXBtZW50c19pbmR1c3RyeV9jb2RlX2xpc3QpKQ0Kew0KICBjdXJyZW50X2NvZGUgPC0gc2hpcG1lbnRzX2luZHVzdHJ5X2NvZGVfbGlzdFtpXQ0KICBjdXJyZW50X2luZHVzdHJ5IDwtIFNoaXBtZW50cyAlPiUgZmlsdGVyKFNoaXBtZW50cyQuLi4xID09IGN1cnJlbnRfY29kZSwgU2hpcG1lbnRzJC4uLjIgIT0gIjIwMjIiKSAlPiUgc2VsZWN0KDM6MTQpDQogIGN1cnJlbnRfaW5kdXN0cnlfdHJhbnNwb3NlIDwtIGFzLmxpc3QodChjdXJyZW50X2luZHVzdHJ5KSkNCiAgZm9yIChqIGluIDE6bGVuZ3RoKGN1cnJlbnRfaW5kdXN0cnlfdHJhbnNwb3NlKSkNCiAgew0KICAgIHNoaXBtZW50c19kYXRhZnJhbWVbaixpXSA9IGN1cnJlbnRfaW5kdXN0cnlfdHJhbnNwb3NlW2pdDQogIH0NCiAgc2hpcG1lbnRzX2RhdGFmcmFtZVtpXSA8LSBzYXBwbHkoc2hpcG1lbnRzX2RhdGFmcmFtZVtpXSxhcy5udW1lcmljKQ0KfQ0KY29sbmFtZXMoc2hpcG1lbnRzX2RhdGFmcmFtZSkgPSBzaGlwbWVudHNfaW5kdXN0cnlfY29kZV9saXN0DQpkYXRlcyA8LSBzZXEoZnJvbSA9IGFzLkRhdGUoIjE5OTIvMDEvMDEiKSwgdG8gPSBhcy5EYXRlKCIyMDIxLzEyLzAxIiksIGJ5ID0gIm1vbnRocyIpDQpkYXRlczIgPC0gZm9ybWF0KGRhdGVzLCAiJW0vJXkiKQ0Kc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lIDwtIHNoaXBtZW50c19kYXRhZnJhbWUgJT4lIGFkZF9jb2x1bW4oRGF0ZSA9IGRhdGVzMikNCmhlYWQoc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lLDEyKQ0KYGBgDQpgYGB7cn0NCm5ld29yZGVyc19pbmR1c3RyeV9jb2RlX2xpc3QgPC0gYXMuYXJyYXkodW5pcXVlKE5ld09yZGVycyQuLi4xKSkNCm5ld29yZGVyc19kYXRhZnJhbWUgPC0gdGliYmxlKC5yb3dzID0gMzYwKQ0KYGBgDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KZm9yIChpIGluIDE6bGVuZ3RoKG5ld29yZGVyc19pbmR1c3RyeV9jb2RlX2xpc3QpKQ0Kew0KICBjdXJyZW50X2NvZGUgPC0gbmV3b3JkZXJzX2luZHVzdHJ5X2NvZGVfbGlzdFtpXQ0KICBjdXJyZW50X2luZHVzdHJ5IDwtIE5ld09yZGVycyAlPiUgZmlsdGVyKE5ld09yZGVycyQuLi4xID09IGN1cnJlbnRfY29kZSwgTmV3T3JkZXJzJC4uLjIgIT0gIjIwMjIiKSAlPiUgc2VsZWN0KDM6MTQpDQogIGN1cnJlbnRfaW5kdXN0cnlfdHJhbnNwb3NlIDwtIGFzLmxpc3QodChjdXJyZW50X2luZHVzdHJ5KSkNCiAgZm9yIChqIGluIDE6bGVuZ3RoKGN1cnJlbnRfaW5kdXN0cnlfdHJhbnNwb3NlKSkNCiAgew0KICAgIG5ld29yZGVyc19kYXRhZnJhbWVbaixpXSA9IGN1cnJlbnRfaW5kdXN0cnlfdHJhbnNwb3NlW2pdDQogIH0NCiAgbmV3b3JkZXJzX2RhdGFmcmFtZVtpXSA8LSBzYXBwbHkobmV3b3JkZXJzX2RhdGFmcmFtZVtpXSxhcy5udW1lcmljKQ0KfQ0KY29sbmFtZXMobmV3b3JkZXJzX2RhdGFmcmFtZSkgPSBuZXdvcmRlcnNfaW5kdXN0cnlfY29kZV9saXN0DQpkYXRlcyA8LSBzZXEoZnJvbSA9IGFzLkRhdGUoIjE5OTIvMDEvMDEiKSwgdG8gPSBhcy5EYXRlKCIyMDIxLzEyLzAxIiksIGJ5ID0gIm1vbnRocyIpDQpkYXRlczIgPC0gZm9ybWF0KGRhdGVzLCAiJW0vJXkiKQ0KbmV3b3JkZXJzX2RhdGFmcmFtZV90aW1lIDwtIG5ld29yZGVyc19kYXRhZnJhbWUgJT4lIGFkZF9jb2x1bW4oRGF0ZSA9IGRhdGVzMikNCmhlYWQobmV3b3JkZXJzX2RhdGFmcmFtZV90aW1lLDEyKQ0KYGBgDQpgYGB7cn0NCnVuZmlsbGVkb3JkZXJzX2luZHVzdHJ5X2NvZGVfbGlzdCA8LSBhcy5hcnJheSh1bmlxdWUoVW5maWxsZWRPcmRlcnMkLi4uMSkpDQp1bmZpbGxlZG9yZGVyc19kYXRhZnJhbWUgPC0gdGliYmxlKC5yb3dzID0gMzYwKQ0KYGBgDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KZm9yIChpIGluIDE6bGVuZ3RoKHVuZmlsbGVkb3JkZXJzX2luZHVzdHJ5X2NvZGVfbGlzdCkpDQp7DQogIGN1cnJlbnRfY29kZSA8LSB1bmZpbGxlZG9yZGVyc19pbmR1c3RyeV9jb2RlX2xpc3RbaV0NCiAgY3VycmVudF9pbmR1c3RyeSA8LSBVbmZpbGxlZE9yZGVycyAlPiUgZmlsdGVyKFVuZmlsbGVkT3JkZXJzJC4uLjEgPT0gY3VycmVudF9jb2RlLCBVbmZpbGxlZE9yZGVycyQuLi4yICE9ICIyMDIyIikgJT4lIHNlbGVjdCgzOjE0KQ0KICBjdXJyZW50X2luZHVzdHJ5X3RyYW5zcG9zZSA8LSBhcy5saXN0KHQoY3VycmVudF9pbmR1c3RyeSkpDQogIGZvciAoaiBpbiAxOmxlbmd0aChjdXJyZW50X2luZHVzdHJ5X3RyYW5zcG9zZSkpDQogIHsNCiAgICB1bmZpbGxlZG9yZGVyc19kYXRhZnJhbWVbaixpXSA9IGN1cnJlbnRfaW5kdXN0cnlfdHJhbnNwb3NlW2pdDQogIH0NCiAgdW5maWxsZWRvcmRlcnNfZGF0YWZyYW1lW2ldIDwtIHNhcHBseSh1bmZpbGxlZG9yZGVyc19kYXRhZnJhbWVbaV0sYXMubnVtZXJpYykNCn0NCmNvbG5hbWVzKHVuZmlsbGVkb3JkZXJzX2RhdGFmcmFtZSkgPSB1bmZpbGxlZG9yZGVyc19pbmR1c3RyeV9jb2RlX2xpc3QNCmRhdGVzIDwtIHNlcShmcm9tID0gYXMuRGF0ZSgiMTk5Mi8wMS8wMSIpLCB0byA9IGFzLkRhdGUoIjIwMjEvMTIvMDEiKSwgYnkgPSAibW9udGhzIikNCmRhdGVzMiA8LSBmb3JtYXQoZGF0ZXMsICIlbS8leSIpDQp1bmZpbGxlZG9yZGVyc19kYXRhZnJhbWVfdGltZSA8LSB1bmZpbGxlZG9yZGVyc19kYXRhZnJhbWUgJT4lIGFkZF9jb2x1bW4oRGF0ZSA9IGRhdGVzMikNCmhlYWQodW5maWxsZWRvcmRlcnNfZGF0YWZyYW1lX3RpbWUsMTIpDQpgYGANCmBgYHtyfQ0KdG90YWxpbnZlbnRvcmllc19pbmR1c3RyeV9jb2RlX2xpc3QgPC0gYXMuYXJyYXkodW5pcXVlKFRvdGFsSW52ZW50b3JpZXMkLi4uMSkpDQp0b3RhbGludmVudG9yaWVzX2RhdGFmcmFtZSA8LSB0aWJibGUoLnJvd3MgPSAzNjApDQpgYGANCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpmb3IgKGkgaW4gMTpsZW5ndGgodG90YWxpbnZlbnRvcmllc19pbmR1c3RyeV9jb2RlX2xpc3QpKQ0Kew0KICBjdXJyZW50X2NvZGUgPC0gdG90YWxpbnZlbnRvcmllc19pbmR1c3RyeV9jb2RlX2xpc3RbaV0NCiAgY3VycmVudF9pbmR1c3RyeSA8LSBUb3RhbEludmVudG9yaWVzICU+JSBmaWx0ZXIoVG90YWxJbnZlbnRvcmllcyQuLi4xID09IGN1cnJlbnRfY29kZSwgVG90YWxJbnZlbnRvcmllcyQuLi4yICE9ICIyMDIyIikgJT4lIHNlbGVjdCgzOjE0KQ0KICBjdXJyZW50X2luZHVzdHJ5X3RyYW5zcG9zZSA8LSBhcy5saXN0KHQoY3VycmVudF9pbmR1c3RyeSkpDQogIGZvciAoaiBpbiAxOmxlbmd0aChjdXJyZW50X2luZHVzdHJ5X3RyYW5zcG9zZSkpDQogIHsNCiAgICB0b3RhbGludmVudG9yaWVzX2RhdGFmcmFtZVtqLGldID0gY3VycmVudF9pbmR1c3RyeV90cmFuc3Bvc2Vbal0NCiAgfQ0KICB0b3RhbGludmVudG9yaWVzX2RhdGFmcmFtZVtpXSA8LSBzYXBwbHkodG90YWxpbnZlbnRvcmllc19kYXRhZnJhbWVbaV0sYXMubnVtZXJpYykNCn0NCmNvbG5hbWVzKHRvdGFsaW52ZW50b3JpZXNfZGF0YWZyYW1lKSA9IHRvdGFsaW52ZW50b3JpZXNfaW5kdXN0cnlfY29kZV9saXN0DQpkYXRlcyA8LSBzZXEoZnJvbSA9IGFzLkRhdGUoIjE5OTIvMDEvMDEiKSwgdG8gPSBhcy5EYXRlKCIyMDIxLzEyLzAxIiksIGJ5ID0gIm1vbnRocyIpDQpkYXRlczIgPC0gZm9ybWF0KGRhdGVzLCAiJW0vJXkiKQ0KdG90YWxpbnZlbnRvcmllc19kYXRhZnJhbWVfdGltZSA8LSB0b3RhbGludmVudG9yaWVzX2RhdGFmcmFtZSAlPiUgYWRkX2NvbHVtbihEYXRlID0gZGF0ZXMyKQ0KaGVhZCh0b3RhbGludmVudG9yaWVzX2RhdGFmcmFtZV90aW1lLDEyKQ0KYGBgDQpgYGB7cn0NCmludmVudG9yaWVzdG9zaGlwbWVudHNfaW5kdXN0cnlfY29kZV9saXN0IDwtIGFzLmFycmF5KHVuaXF1ZShJbnZlbnRvcmllc1RvU2hpcG1lbnRzJC4uLjEpKQ0KaW52ZW50b3JpZXN0b3NoaXBtZW50c19kYXRhZnJhbWUgPC0gdGliYmxlKC5yb3dzID0gMzYwKQ0KYGBgDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KZm9yIChpIGluIDE6bGVuZ3RoKGludmVudG9yaWVzdG9zaGlwbWVudHNfaW5kdXN0cnlfY29kZV9saXN0KSkNCnsNCiAgY3VycmVudF9jb2RlIDwtIGludmVudG9yaWVzdG9zaGlwbWVudHNfaW5kdXN0cnlfY29kZV9saXN0W2ldDQogIGN1cnJlbnRfaW5kdXN0cnkgPC0gSW52ZW50b3JpZXNUb1NoaXBtZW50cyAlPiUgZmlsdGVyKEludmVudG9yaWVzVG9TaGlwbWVudHMkLi4uMSA9PSBjdXJyZW50X2NvZGUsIEludmVudG9yaWVzVG9TaGlwbWVudHMkLi4uMiAhPSAiMjAyMiIpICU+JSBzZWxlY3QoMzoxNCkNCiAgY3VycmVudF9pbmR1c3RyeV90cmFuc3Bvc2UgPC0gYXMubGlzdCh0KGN1cnJlbnRfaW5kdXN0cnkpKQ0KICBmb3IgKGogaW4gMTpsZW5ndGgoY3VycmVudF9pbmR1c3RyeV90cmFuc3Bvc2UpKQ0KICB7DQogICAgaW52ZW50b3JpZXN0b3NoaXBtZW50c19kYXRhZnJhbWVbaixpXSA9IGN1cnJlbnRfaW5kdXN0cnlfdHJhbnNwb3NlW2pdDQogIH0NCiAgaW52ZW50b3JpZXN0b3NoaXBtZW50c19kYXRhZnJhbWVbaV0gPC0gc2FwcGx5KGludmVudG9yaWVzdG9zaGlwbWVudHNfZGF0YWZyYW1lW2ldLGFzLm51bWVyaWMpDQp9DQpjb2xuYW1lcyhpbnZlbnRvcmllc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZSkgPSBpbnZlbnRvcmllc3Rvc2hpcG1lbnRzX2luZHVzdHJ5X2NvZGVfbGlzdA0KZGF0ZXMgPC0gc2VxKGZyb20gPSBhcy5EYXRlKCIxOTkyLzAxLzAxIiksIHRvID0gYXMuRGF0ZSgiMjAyMS8xMi8wMSIpLCBieSA9ICJtb250aHMiKQ0KZGF0ZXMyIDwtIGZvcm1hdChkYXRlcywgIiVtLyV5IikNCmludmVudG9yaWVzdG9zaGlwbWVudHNfZGF0YWZyYW1lX3RpbWUgPC0gaW52ZW50b3JpZXN0b3NoaXBtZW50c19kYXRhZnJhbWUgJT4lIGFkZF9jb2x1bW4oRGF0ZSA9IGRhdGVzMikNCmhlYWQoaW52ZW50b3JpZXN0b3NoaXBtZW50c19kYXRhZnJhbWVfdGltZSwxMikNCmBgYA0KYGBge3J9DQp1bmZpbGxlZG9yZGVyc3Rvc2hpcG1lbnRzX2luZHVzdHJ5X2NvZGVfbGlzdCA8LSBhcy5hcnJheSh1bmlxdWUoVW5maWxsZWRPcmRlcnNUb1NoaXBtZW50cyQuLi4xKSkNCnVuZmlsbGVkb3JkZXJzdG9zaGlwbWVudHNfZGF0YWZyYW1lIDwtIHRpYmJsZSgucm93cyA9IDM2MCkNCmBgYA0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmZvciAoaSBpbiAxOmxlbmd0aCh1bmZpbGxlZG9yZGVyc3Rvc2hpcG1lbnRzX2luZHVzdHJ5X2NvZGVfbGlzdCkpDQp7DQogIGN1cnJlbnRfY29kZSA8LSB1bmZpbGxlZG9yZGVyc3Rvc2hpcG1lbnRzX2luZHVzdHJ5X2NvZGVfbGlzdFtpXQ0KICBjdXJyZW50X2luZHVzdHJ5IDwtIFVuZmlsbGVkT3JkZXJzVG9TaGlwbWVudHMgJT4lIGZpbHRlcihVbmZpbGxlZE9yZGVyc1RvU2hpcG1lbnRzJC4uLjEgPT0gY3VycmVudF9jb2RlLCBVbmZpbGxlZE9yZGVyc1RvU2hpcG1lbnRzJC4uLjIgIT0gIjIwMjIiKSAlPiUgc2VsZWN0KDM6MTQpDQogIGN1cnJlbnRfaW5kdXN0cnlfdHJhbnNwb3NlIDwtIGFzLmxpc3QodChjdXJyZW50X2luZHVzdHJ5KSkNCiAgZm9yIChqIGluIDE6bGVuZ3RoKGN1cnJlbnRfaW5kdXN0cnlfdHJhbnNwb3NlKSkNCiAgew0KICAgIHVuZmlsbGVkb3JkZXJzdG9zaGlwbWVudHNfZGF0YWZyYW1lW2osaV0gPSBjdXJyZW50X2luZHVzdHJ5X3RyYW5zcG9zZVtqXQ0KICB9DQogIHVuZmlsbGVkb3JkZXJzdG9zaGlwbWVudHNfZGF0YWZyYW1lW2ldIDwtIHNhcHBseSh1bmZpbGxlZG9yZGVyc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZVtpXSxhcy5udW1lcmljKQ0KfQ0KY29sbmFtZXModW5maWxsZWRvcmRlcnN0b3NoaXBtZW50c19kYXRhZnJhbWUpID0gdW5maWxsZWRvcmRlcnN0b3NoaXBtZW50c19pbmR1c3RyeV9jb2RlX2xpc3QNCmRhdGVzIDwtIHNlcShmcm9tID0gYXMuRGF0ZSgiMTk5Mi8wMS8wMSIpLCB0byA9IGFzLkRhdGUoIjIwMjEvMTIvMDEiKSwgYnkgPSAibW9udGhzIikNCmRhdGVzMiA8LSBmb3JtYXQoZGF0ZXMsICIlbS8leSIpDQp1bmZpbGxlZG9yZGVyc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lIDwtIHVuZmlsbGVkb3JkZXJzdG9zaGlwbWVudHNfZGF0YWZyYW1lICU+JSBhZGRfY29sdW1uKERhdGUgPSBkYXRlczIpDQpoZWFkKHVuZmlsbGVkb3JkZXJzdG9zaGlwbWVudHNfZGF0YWZyYW1lX3RpbWUsMTIpDQpgYGANCmBgYHtyfQ0KbWVhbl9yb3dfc2hpcCA8LSBjb2xNZWFucyhzaGlwbWVudHNfZGF0YWZyYW1lX3RpbWVbc2FwcGx5KHNoaXBtZW50c19kYXRhZnJhbWVfdGltZSwgaXMubnVtZXJpYyldLG5hLnJtID0gVFJVRSkNCm1lZGlhbl9yb3dfc2hpcCA8LSBjb2xNZWRpYW5zKGFzLm1hdHJpeChzaGlwbWVudHNfZGF0YWZyYW1lX3RpbWVbc2FwcGx5KHNoaXBtZW50c19kYXRhZnJhbWVfdGltZSwgaXMubnVtZXJpYyldKSxuYS5ybSA9IFRSVUUpDQpzZF9yb3dfc2hpcCA8LSBjb2xTZHMoYXMubWF0cml4KHNoaXBtZW50c19kYXRhZnJhbWVfdGltZVtzYXBwbHkoc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lLCBpcy5udW1lcmljKV0pLG5hLnJtID0gVFJVRSkNCnNoaXBtZW50c19tbXYxIDwtIHNoaXBtZW50c19kYXRhZnJhbWVfdGltZSAlPiUgcmJpbmQoc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lLCBtZWFuX3Jvd19zaGlwKQ0Kc2hpcG1lbnRzX21tdjIgPC0gc2hpcG1lbnRzX21tdjEgJT4lIHJiaW5kKHNoaXBtZW50c19tbXYxLCBtZWRpYW5fcm93X3NoaXApDQpzaGlwbWVudHNfbW12IDwtIHNoaXBtZW50c19tbXYyICU+JSByYmluZChzaGlwbWVudHNfbW12Miwgc2Rfcm93X3NoaXApDQpzaGlwbWVudHNfbW12W25yb3coc2hpcG1lbnRzX21tdiktMixuY29sKHNoaXBtZW50c19tbXYpXSA8LSAiTWVhbiINCnNoaXBtZW50c19tbXZbbnJvdyhzaGlwbWVudHNfbW12KS0xLG5jb2woc2hpcG1lbnRzX21tdildIDwtICJNZWRpYW4iDQpzaGlwbWVudHNfbW12W25yb3coc2hpcG1lbnRzX21tdiksbmNvbChzaGlwbWVudHNfbW12KV0gPC0gIlN0YW5kYXJkIERldmlhdGlvbiINCnRhaWwoc2hpcG1lbnRzX21tdiwxMCkNCmBgYA0KYGBge3J9DQptZWFuX3Jvd19uZXdvcmQgPC0gY29sTWVhbnMobmV3b3JkZXJzX2RhdGFmcmFtZV90aW1lW3NhcHBseShuZXdvcmRlcnNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSxuYS5ybSA9IFRSVUUpDQptZWRpYW5fcm93X25ld29yZCA8LSBjb2xNZWRpYW5zKGFzLm1hdHJpeChuZXdvcmRlcnNfZGF0YWZyYW1lX3RpbWVbc2FwcGx5KG5ld29yZGVyc19kYXRhZnJhbWVfdGltZSwgaXMubnVtZXJpYyldKSxuYS5ybSA9IFRSVUUpDQpzZF9yb3dfbmV3b3JkIDwtIGNvbFNkcyhhcy5tYXRyaXgobmV3b3JkZXJzX2RhdGFmcmFtZV90aW1lW3NhcHBseShuZXdvcmRlcnNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSksbmEucm0gPSBUUlVFKQ0KbmV3b3JkZXJzX21tdjEgPC0gbmV3b3JkZXJzX2RhdGFmcmFtZV90aW1lICU+JSByYmluZChuZXdvcmRlcnNfZGF0YWZyYW1lX3RpbWUsIG1lYW5fcm93X25ld29yZCkNCm5ld29yZGVyc19tbXYyIDwtIG5ld29yZGVyc19tbXYxICU+JSByYmluZChuZXdvcmRlcnNfbW12MSwgbWVkaWFuX3Jvd19uZXdvcmQpDQpuZXdvcmRlcnNfbW12IDwtIG5ld29yZGVyc19tbXYyICU+JSByYmluZChuZXdvcmRlcnNfbW12Miwgc2Rfcm93X25ld29yZCkNCm5ld29yZGVyc19tbXZbbnJvdyhuZXdvcmRlcnNfbW12KS0yLG5jb2wobmV3b3JkZXJzX21tdildIDwtICJNZWFuIg0KbmV3b3JkZXJzX21tdltucm93KG5ld29yZGVyc19tbXYpLTEsbmNvbChuZXdvcmRlcnNfbW12KV0gPC0gIk1lZGlhbiINCm5ld29yZGVyc19tbXZbbnJvdyhuZXdvcmRlcnNfbW12KSxuY29sKG5ld29yZGVyc19tbXYpXSA8LSAiU3RhbmRhcmQgRGV2aWF0aW9uIg0KdGFpbChuZXdvcmRlcnNfbW12LDEwKQ0KYGBgDQpgYGB7cn0NCm1lYW5fcm93X3VuZmlsbG9yZCA8LSBjb2xNZWFucyh1bmZpbGxlZG9yZGVyc19kYXRhZnJhbWVfdGltZVtzYXBwbHkodW5maWxsZWRvcmRlcnNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSxuYS5ybSA9IFRSVUUpDQptZWRpYW5fcm93X3VuZmlsbG9yZCA8LSBjb2xNZWRpYW5zKGFzLm1hdHJpeCh1bmZpbGxlZG9yZGVyc19kYXRhZnJhbWVfdGltZVtzYXBwbHkodW5maWxsZWRvcmRlcnNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSksbmEucm0gPSBUUlVFKQ0Kc2Rfcm93X3VuZmlsbG9yZCA8LSBjb2xTZHMoYXMubWF0cml4KHVuZmlsbGVkb3JkZXJzX2RhdGFmcmFtZV90aW1lW3NhcHBseSh1bmZpbGxlZG9yZGVyc19kYXRhZnJhbWVfdGltZSwgaXMubnVtZXJpYyldKSxuYS5ybSA9IFRSVUUpDQp1bmZpbGxvcmRfbW12MSA8LSB1bmZpbGxlZG9yZGVyc19kYXRhZnJhbWVfdGltZSAlPiUgcmJpbmQodW5maWxsZWRvcmRlcnNfZGF0YWZyYW1lX3RpbWUsIG1lYW5fcm93X3VuZmlsbG9yZCkNCnVuZmlsbG9yZF9tbXYyIDwtIHVuZmlsbG9yZF9tbXYxICU+JSByYmluZCh1bmZpbGxvcmRfbW12MSwgbWVkaWFuX3Jvd191bmZpbGxvcmQpDQp1bmZpbGxvcmRfbW12IDwtIHVuZmlsbG9yZF9tbXYyICU+JSByYmluZCh1bmZpbGxvcmRfbW12Miwgc2Rfcm93X3VuZmlsbG9yZCkNCnVuZmlsbG9yZF9tbXZbbnJvdyh1bmZpbGxvcmRfbW12KS0yLG5jb2wodW5maWxsb3JkX21tdildIDwtICJNZWFuIg0KdW5maWxsb3JkX21tdltucm93KHVuZmlsbG9yZF9tbXYpLTEsbmNvbCh1bmZpbGxvcmRfbW12KV0gPC0gIk1lZGlhbiINCnVuZmlsbG9yZF9tbXZbbnJvdyh1bmZpbGxvcmRfbW12KSxuY29sKHVuZmlsbG9yZF9tbXYpXSA8LSAiU3RhbmRhcmQgRGV2aWF0aW9uIg0KdGFpbCh1bmZpbGxvcmRfbW12LDEwKQ0KYGBgDQpgYGB7cn0NCm1lYW5fcm93X3RvdGFsaW52IDwtIGNvbE1lYW5zKHRvdGFsaW52ZW50b3JpZXNfZGF0YWZyYW1lX3RpbWVbc2FwcGx5KHRvdGFsaW52ZW50b3JpZXNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSxuYS5ybSA9IFRSVUUpDQptZWRpYW5fcm93X3RvdGFsaW52IDwtIGNvbE1lZGlhbnMoYXMubWF0cml4KHRvdGFsaW52ZW50b3JpZXNfZGF0YWZyYW1lX3RpbWVbc2FwcGx5KHRvdGFsaW52ZW50b3JpZXNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSksbmEucm0gPSBUUlVFKQ0Kc2Rfcm93X3RvdGFsaW52IDwtIGNvbFNkcyhhcy5tYXRyaXgodG90YWxpbnZlbnRvcmllc19kYXRhZnJhbWVfdGltZVtzYXBwbHkodG90YWxpbnZlbnRvcmllc19kYXRhZnJhbWVfdGltZSwgaXMubnVtZXJpYyldKSxuYS5ybSA9IFRSVUUpDQp0b3RhbGludl9tbXYxIDwtIHRvdGFsaW52ZW50b3JpZXNfZGF0YWZyYW1lX3RpbWUgJT4lIHJiaW5kKHRvdGFsaW52ZW50b3JpZXNfZGF0YWZyYW1lX3RpbWUsIG1lYW5fcm93X3RvdGFsaW52KQ0KdG90YWxpbnZfbW12MiA8LSB0b3RhbGludl9tbXYxICU+JSByYmluZCh0b3RhbGludl9tbXYxLCBtZWRpYW5fcm93X3RvdGFsaW52KQ0KdG90YWxpbnZfbW12IDwtIHRvdGFsaW52X21tdjIgJT4lIHJiaW5kKHRvdGFsaW52X21tdjIsIHNkX3Jvd190b3RhbGludikNCnRvdGFsaW52X21tdltucm93KHRvdGFsaW52X21tdiktMixuY29sKHRvdGFsaW52X21tdildIDwtICJNZWFuIg0KdG90YWxpbnZfbW12W25yb3codG90YWxpbnZfbW12KS0xLG5jb2wodG90YWxpbnZfbW12KV0gPC0gIk1lZGlhbiINCnRvdGFsaW52X21tdltucm93KHRvdGFsaW52X21tdiksbmNvbCh0b3RhbGludl9tbXYpXSA8LSAiU3RhbmRhcmQgRGV2aWF0aW9uIg0KdGFpbCh0b3RhbGludl9tbXYsMTApDQpgYGANCmBgYHtyfQ0KbWVhbl9yb3dfaW52dG9zaGlwIDwtIGNvbE1lYW5zKGludmVudG9yaWVzdG9zaGlwbWVudHNfZGF0YWZyYW1lX3RpbWVbc2FwcGx5KGludmVudG9yaWVzdG9zaGlwbWVudHNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSxuYS5ybSA9IFRSVUUpDQptZWRpYW5fcm93X2ludnRvc2hpcCA8LSBjb2xNZWRpYW5zKGFzLm1hdHJpeChpbnZlbnRvcmllc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lW3NhcHBseShpbnZlbnRvcmllc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lLCBpcy5udW1lcmljKV0pLG5hLnJtID0gVFJVRSkNCnNkX3Jvd19pbnZ0b3NoaXAgPC0gY29sU2RzKGFzLm1hdHJpeChpbnZlbnRvcmllc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lW3NhcHBseShpbnZlbnRvcmllc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lLCBpcy5udW1lcmljKV0pLG5hLnJtID0gVFJVRSkNCmludnRvc2hpcF9tbXYxIDwtIGludmVudG9yaWVzdG9zaGlwbWVudHNfZGF0YWZyYW1lX3RpbWUgJT4lIHJiaW5kKGludmVudG9yaWVzdG9zaGlwbWVudHNfZGF0YWZyYW1lX3RpbWUsIG1lYW5fcm93X2ludnRvc2hpcCkNCmludnRvc2hpcF9tbXYyIDwtIGludnRvc2hpcF9tbXYxICU+JSByYmluZChpbnZ0b3NoaXBfbW12MSwgbWVkaWFuX3Jvd19pbnZ0b3NoaXApDQppbnZ0b3NoaXBfbW12IDwtIGludnRvc2hpcF9tbXYyICU+JSByYmluZChpbnZ0b3NoaXBfbW12Miwgc2Rfcm93X2ludnRvc2hpcCkNCmludnRvc2hpcF9tbXZbbnJvdyhpbnZ0b3NoaXBfbW12KS0yLG5jb2woaW52dG9zaGlwX21tdildIDwtICJNZWFuIg0KaW52dG9zaGlwX21tdltucm93KGludnRvc2hpcF9tbXYpLTEsbmNvbChpbnZ0b3NoaXBfbW12KV0gPC0gIk1lZGlhbiINCmludnRvc2hpcF9tbXZbbnJvdyhpbnZ0b3NoaXBfbW12KSxuY29sKGludnRvc2hpcF9tbXYpXSA8LSAiU3RhbmRhcmQgRGV2aWF0aW9uIg0KdGFpbChpbnZ0b3NoaXBfbW12LDEwKQ0KYGBgDQpgYGB7cn0NCm1lYW5fcm93X3VuZmlsbHRvc2hpcCA8LSBjb2xNZWFucyh1bmZpbGxlZG9yZGVyc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lW3NhcHBseSh1bmZpbGxlZG9yZGVyc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lLCBpcy5udW1lcmljKV0sbmEucm0gPSBUUlVFKQ0KbWVkaWFuX3Jvd191bmZpbGx0b3NoaXAgPC0gY29sTWVkaWFucyhhcy5tYXRyaXgodW5maWxsZWRvcmRlcnN0b3NoaXBtZW50c19kYXRhZnJhbWVfdGltZVtzYXBwbHkodW5maWxsZWRvcmRlcnN0b3NoaXBtZW50c19kYXRhZnJhbWVfdGltZSwgaXMubnVtZXJpYyldKSxuYS5ybSA9IFRSVUUpDQpzZF9yb3dfdW5maWxsdG9zaGlwIDwtIGNvbFNkcyhhcy5tYXRyaXgodW5maWxsZWRvcmRlcnN0b3NoaXBtZW50c19kYXRhZnJhbWVfdGltZVtzYXBwbHkodW5maWxsZWRvcmRlcnN0b3NoaXBtZW50c19kYXRhZnJhbWVfdGltZSwgaXMubnVtZXJpYyldKSxuYS5ybSA9IFRSVUUpDQp1bmZpbGx0b3NoaXBfbW12MSA8LSB1bmZpbGxlZG9yZGVyc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lICU+JSByYmluZCh1bmZpbGxlZG9yZGVyc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lLCBtZWFuX3Jvd191bmZpbGx0b3NoaXApDQp1bmZpbGx0b3NoaXBfbW12MiA8LSB1bmZpbGx0b3NoaXBfbW12MSAlPiUgcmJpbmQodW5maWxsdG9zaGlwX21tdjEsIG1lZGlhbl9yb3dfdW5maWxsdG9zaGlwKQ0KdW5maWxsdG9zaGlwX21tdiA8LSB1bmZpbGx0b3NoaXBfbW12MiAlPiUgcmJpbmQodW5maWxsdG9zaGlwX21tdjIsIHNkX3Jvd191bmZpbGx0b3NoaXApDQp1bmZpbGx0b3NoaXBfbW12W25yb3codW5maWxsdG9zaGlwX21tdiktMixuY29sKHVuZmlsbHRvc2hpcF9tbXYpXSA8LSAiTWVhbiINCnVuZmlsbHRvc2hpcF9tbXZbbnJvdyh1bmZpbGx0b3NoaXBfbW12KS0xLG5jb2wodW5maWxsdG9zaGlwX21tdildIDwtICJNZWRpYW4iDQp1bmZpbGx0b3NoaXBfbW12W25yb3codW5maWxsdG9zaGlwX21tdiksbmNvbCh1bmZpbGx0b3NoaXBfbW12KV0gPC0gIlN0YW5kYXJkIERldmlhdGlvbiINCnRhaWwodW5maWxsdG9zaGlwX21tdiwxMCkNCmBgYA0KYGBge3J9DQpzaGlwbWVudF9tZWFucyA8LSBzaGlwbWVudHNfbW12ICU+JSBmaWx0ZXIoc2hpcG1lbnRzX21tdiREYXRlID09ICJNZWFuIikgJT4lIHNlbGVjdF9pZiguID49IDMwMDAwMCkNCnNoaXBtZW50X21lYW5zDQpgYGANCmBgYHtyfQ0KQU1UTVZTIDwtIHRzKGRhdGEgPSBzaGlwbWVudHNfbW12JEFNVE1WUywgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KQU1YVFZTIDwtIHRzKGRhdGEgPSBzaGlwbWVudHNfbW12JEFNWFRWUywgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KQU1YRFZTIDwtIHRzKGRhdGEgPSBzaGlwbWVudHNfbW12JEFNWERWUywgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KdHMucGxvdChBTVRNVlMsIEFNWFRWUywgQU1YRFZTLCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTozKSksIGNvbD1yZXAoYygicmVkIiwiYmx1ZSIsImdyZWVuIikpKQ0KbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYygiQU1UTVZTIiwiQU1YVFZTIiwiQU1YRFZTIiksIGNvbCA9IGMoInJlZCIsImJsdWUiLCJncmVlbiIpLCBsdHk9YygxOjMpKQ0KYGBgDQpgYGB7cn0NCnNoaXBtZW50c19vcmRlciA8LSBvcmRlcihjb2xNZWFucyhzaGlwbWVudHNfZGF0YWZyYW1lX3RpbWVbc2FwcGx5KHNoaXBtZW50c19kYXRhZnJhbWVfdGltZSwgaXMubnVtZXJpYyldLG5hLnJtID0gVFJVRSkpDQpzaGlwbWVudHNfbW12X29yZGVyZWRfbWVhbiA8LSBzaGlwbWVudHNfbW12ICU+JSBzZWxlY3QoYWxsX29mKHNoaXBtZW50c19vcmRlciksIG5jb2woc2hpcG1lbnRzX21tdikpDQpzaGlwbWVudHNfbW12X29yZGVyZWRfbWVhbl9hZGogPC0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lYW4gJT4lIHNlbGVjdChzdGFydHNfd2l0aCgnQScpKSAjODcgQ29sdW1ucw0Kc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lYW5fdW5hZGogPC0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lYW4gJT4lIHNlbGVjdChzdGFydHNfd2l0aCgnVScpKSAjODcgQ29sdW1ucw0KZm9yIChpIGluIGMoMSw2LDExLDE2LDIxLDI2LDMxLDM2LDQxLDQ2LDUxLDU2LDYxLDY2LDcxLDc2LDgxKSkNCnsNCiAgU2VyaWVzMSA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lYW5fYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSBzaGlwbWVudHNfbW12X29yZGVyZWRfbWVhbl9hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lYW5fYWRqWyxpKzJdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczQgPC0gdHMoZGF0YSA9IHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWFuX2FkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSBzaGlwbWVudHNfbW12X29yZGVyZWRfbWVhbl9hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXMoc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lYW5fYWRqKVtpXSxjb2xuYW1lcyhzaGlwbWVudHNfbW12X29yZGVyZWRfbWVhbl9hZGopW2krMV0sY29sbmFtZXMoc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lYW5fYWRqKVtpKzJdLGNvbG5hbWVzKHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWFuX2FkailbaSszXSxjb2xuYW1lcyhzaGlwbWVudHNfbW12X29yZGVyZWRfbWVhbl9hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQpgYGB7cn0NCmZvciAoaSBpbiBjKDEsNiwxMSwxNiwyMSwyNiwzMSwzNiw0MSw0Niw1MSw1Niw2MSw2Niw3MSw3Niw4MSkpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWFuX3VuYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSBzaGlwbWVudHNfbW12X29yZGVyZWRfbWVhbl91bmFkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSBzaGlwbWVudHNfbW12X29yZGVyZWRfbWVhbl91bmFkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSBzaGlwbWVudHNfbW12X29yZGVyZWRfbWVhbl91bmFkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSBzaGlwbWVudHNfbW12X29yZGVyZWRfbWVhbl91bmFkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyhzaGlwbWVudHNfbW12X29yZGVyZWRfbWVhbl91bmFkailbaV0sY29sbmFtZXMoc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lYW5fdW5hZGopW2krMV0sY29sbmFtZXMoc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lYW5fdW5hZGopW2krMl0sY29sbmFtZXMoc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lYW5fdW5hZGopW2krM10sY29sbmFtZXMoc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lYW5fdW5hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQoNCmBgYHtyfQ0KbmV3b3JkZXJzX29yZGVyIDwtIG9yZGVyKGNvbE1lYW5zKG5ld29yZGVyc19kYXRhZnJhbWVfdGltZVtzYXBwbHkobmV3b3JkZXJzX2RhdGFmcmFtZV90aW1lLCBpcy5udW1lcmljKV0sbmEucm0gPSBUUlVFKSkNCm5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWFuIDwtIG5ld29yZGVyc19tbXYgJT4lIHNlbGVjdChhbGxfb2YobmV3b3JkZXJzX29yZGVyKSwgbmNvbChuZXdvcmRlcnNfbW12KSkNCm5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWFuX2FkaiA8LSBuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVhbiAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCdBJykpICM1MiBDb2x1bW5zDQpuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVhbl91bmFkaiA8LSBuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVhbiAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCdVJykpICM1MiBDb2x1bW5zDQpmb3IgKGkgaW4gYygxLDYsMTEsMTYsMjEsMjYsMzEsMzYsNDEsNDYpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSBuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVhbl9hZGpbLGldLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczIgPC0gdHMoZGF0YSA9IG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWFuX2FkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSBuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVhbl9hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gbmV3b3JkZXJzX21tdl9vcmRlcmVkX21lYW5fYWRqWyxpKzNdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczUgPC0gdHMoZGF0YSA9IG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWFuX2FkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyhuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVhbl9hZGopW2ldLGNvbG5hbWVzKG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWFuX2FkailbaSsxXSxjb2xuYW1lcyhuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVhbl9hZGopW2krMl0sY29sbmFtZXMobmV3b3JkZXJzX21tdl9vcmRlcmVkX21lYW5fYWRqKVtpKzNdLGNvbG5hbWVzKG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWFuX2FkailbaSs0XSksIGNvbCA9IGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIiksIGx0eT1jKDE6NCkpDQp9DQpgYGANCmBgYHtyfQ0KZm9yIChpIGluIGMoMSw2LDExLDE2LDIxLDI2LDMxLDM2LDQxLDQ2KSkNCnsNCiAgU2VyaWVzMSA8LSB0cyhkYXRhID0gbmV3b3JkZXJzX21tdl9vcmRlcmVkX21lYW5fdW5hZGpbLGldLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczIgPC0gdHMoZGF0YSA9IG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWFuX3VuYWRqWyxpKzFdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczMgPC0gdHMoZGF0YSA9IG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWFuX3VuYWRqWyxpKzJdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczQgPC0gdHMoZGF0YSA9IG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWFuX3VuYWRqWyxpKzNdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczUgPC0gdHMoZGF0YSA9IG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWFuX3VuYWRqWyxpKzRdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIHRzLnBsb3QoU2VyaWVzMSwgU2VyaWVzMiwgU2VyaWVzMywgU2VyaWVzNCwgU2VyaWVzNSwgZ3BhcnM9bGlzdCh4bGFiPSJZZWFyIiwgeWxhYj0iVmFsdWUiLGx0eT1jKDE6NSkpLCBjb2w9cmVwKGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIikpKQ0KICBsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjKGNvbG5hbWVzKG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWFuX3VuYWRqKVtpXSxjb2xuYW1lcyhuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVhbl91bmFkailbaSsxXSxjb2xuYW1lcyhuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVhbl91bmFkailbaSsyXSxjb2xuYW1lcyhuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVhbl91bmFkailbaSszXSxjb2xuYW1lcyhuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVhbl91bmFkailbaSs0XSksIGNvbCA9IGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIiksIGx0eT1jKDE6NCkpDQp9DQpgYGANCg0KYGBge3J9DQp1bmZpbGxlZG9yZGVyc19vcmRlciA8LSBvcmRlcihjb2xNZWFucyh1bmZpbGxlZG9yZGVyc19kYXRhZnJhbWVfdGltZVtzYXBwbHkodW5maWxsZWRvcmRlcnNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSxuYS5ybSA9IFRSVUUpKQ0KdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVhbiA8LSB1bmZpbGxvcmRfbW12ICU+JSBzZWxlY3QoYWxsX29mKHVuZmlsbGVkb3JkZXJzX29yZGVyKSwgbmNvbCh1bmZpbGxvcmRfbW12KSkNCnVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lYW5fYWRqIDwtIHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lYW4gJT4lIHNlbGVjdChzdGFydHNfd2l0aCgnQScpKSAjNTAgQ29sdW1ucw0KdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVhbl91bmFkaiA8LSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWFuICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ1UnKSkgIzUyIENvbHVtbnMNCmZvciAoaSBpbiBjKDEsNiwxMSwxNiwyMSwyNiwzMSwzNiw0MSw0NikpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lYW5fYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWFuX2FkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWFuX2FkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWFuX2FkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWFuX2FkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyh1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWFuX2FkailbaV0sY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVhbl9hZGopW2krMV0sY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVhbl9hZGopW2krMl0sY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVhbl9hZGopW2krM10sY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVhbl9hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQpgYGB7cn0NCmZvciAoaSBpbiBjKDEsNiwxMSwxNiwyMSwyNiwzMSwzNiw0MSw0NikpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lYW5fdW5hZGpbLGldLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczIgPC0gdHMoZGF0YSA9IHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lYW5fdW5hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVhbl91bmFkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWFuX3VuYWRqWyxpKzNdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczUgPC0gdHMoZGF0YSA9IHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lYW5fdW5hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVhbl91bmFkailbaV0sY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVhbl91bmFkailbaSsxXSxjb2xuYW1lcyh1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWFuX3VuYWRqKVtpKzJdLGNvbG5hbWVzKHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lYW5fdW5hZGopW2krM10sY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVhbl91bmFkailbaSs0XSksIGNvbCA9IGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIiksIGx0eT1jKDE6NCkpDQp9DQpgYGANCg0KYGBge3J9DQp0b3RhbGludl9vcmRlciA8LSBvcmRlcihjb2xNZWFucyh0b3RhbGludmVudG9yaWVzX2RhdGFmcmFtZV90aW1lW3NhcHBseSh0b3RhbGludmVudG9yaWVzX2RhdGFmcmFtZV90aW1lLCBpcy5udW1lcmljKV0sbmEucm0gPSBUUlVFKSkNCnRvdGFsaW52X21tdl9vcmRlcmVkX21lYW4gPC0gdG90YWxpbnZfbW12ICU+JSBzZWxlY3QoYWxsX29mKHRvdGFsaW52X29yZGVyKSwgbmNvbCh0b3RhbGludl9tbXYpKQ0KdG90YWxpbnZfbW12X29yZGVyZWRfbWVhbl9hZGogPC0gdG90YWxpbnZfbW12X29yZGVyZWRfbWVhbiAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCdBJykpICMxNTggQ29sdW1ucw0KdG90YWxpbnZfbW12X29yZGVyZWRfbWVhbl91bmFkaiA8LSB0b3RhbGludl9tbXZfb3JkZXJlZF9tZWFuICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ1UnKSkgIzE1OCBDb2x1bW5zDQpmb3IgKGkgaW4gYygxLDYsMTEsMTYsMjEsMjYsMzEsMzYsNDEsNDYsNTEsNTYsNjEsNjYsNzEsNzYsODEsODYsOTEsOTYsMTAxLDEwNiwxMTEsMTE2LDEyMSwxMjYsMTMxLDEzNiwxNDEsMTQ2LDE1MSkpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IHRvdGFsaW52X21tdl9vcmRlcmVkX21lYW5fYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSB0b3RhbGludl9tbXZfb3JkZXJlZF9tZWFuX2FkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSB0b3RhbGludl9tbXZfb3JkZXJlZF9tZWFuX2FkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSB0b3RhbGludl9tbXZfb3JkZXJlZF9tZWFuX2FkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSB0b3RhbGludl9tbXZfb3JkZXJlZF9tZWFuX2FkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyh0b3RhbGludl9tbXZfb3JkZXJlZF9tZWFuX2FkailbaV0sY29sbmFtZXModG90YWxpbnZfbW12X29yZGVyZWRfbWVhbl9hZGopW2krMV0sY29sbmFtZXModG90YWxpbnZfbW12X29yZGVyZWRfbWVhbl9hZGopW2krMl0sY29sbmFtZXModG90YWxpbnZfbW12X29yZGVyZWRfbWVhbl9hZGopW2krM10sY29sbmFtZXModG90YWxpbnZfbW12X29yZGVyZWRfbWVhbl9hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQpgYGB7cn0NCmZvciAoaSBpbiBjKDEsNiwxMSwxNiwyMSwyNiwzMSwzNiw0MSw0Niw1MSw1Niw2MSw2Niw3MSw3Niw4MSw4Niw5MSw5NiwxMDEsMTA2LDExMSwxMTYsMTIxLDEyNiwxMzEsMTM2LDE0MSwxNDYsMTUxKSkNCnsNCiAgU2VyaWVzMSA8LSB0cyhkYXRhID0gdG90YWxpbnZfbW12X29yZGVyZWRfbWVhbl91bmFkalssaV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMiA8LSB0cyhkYXRhID0gdG90YWxpbnZfbW12X29yZGVyZWRfbWVhbl91bmFkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSB0b3RhbGludl9tbXZfb3JkZXJlZF9tZWFuX3VuYWRqWyxpKzJdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczQgPC0gdHMoZGF0YSA9IHRvdGFsaW52X21tdl9vcmRlcmVkX21lYW5fdW5hZGpbLGkrM10sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNSA8LSB0cyhkYXRhID0gdG90YWxpbnZfbW12X29yZGVyZWRfbWVhbl91bmFkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyh0b3RhbGludl9tbXZfb3JkZXJlZF9tZWFuX3VuYWRqKVtpXSxjb2xuYW1lcyh0b3RhbGludl9tbXZfb3JkZXJlZF9tZWFuX3VuYWRqKVtpKzFdLGNvbG5hbWVzKHRvdGFsaW52X21tdl9vcmRlcmVkX21lYW5fdW5hZGopW2krMl0sY29sbmFtZXModG90YWxpbnZfbW12X29yZGVyZWRfbWVhbl91bmFkailbaSszXSxjb2xuYW1lcyh0b3RhbGludl9tbXZfb3JkZXJlZF9tZWFuX3VuYWRqKVtpKzRdKSwgY29sID0gYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSwgbHR5PWMoMTo0KSkNCn0NCmBgYA0KDQpgYGB7cn0NCmludnRvc2hpcF9vcmRlciA8LSBvcmRlcihjb2xNZWFucyhpbnZlbnRvcmllc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lW3NhcHBseShpbnZlbnRvcmllc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lLCBpcy5udW1lcmljKV0sbmEucm0gPSBUUlVFKSkNCmludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuIDwtIGludnRvc2hpcF9tbXYgJT4lIHNlbGVjdChhbGxfb2YoaW52dG9zaGlwX29yZGVyKSwgbmNvbChpbnZ0b3NoaXBfbW12KSkNCmludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuX2FkaiA8LSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVhbiAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCdBJykpICMyNCBDb2x1bW5zDQppbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVhbl91bmFkaiA8LSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVhbiAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCdVJykpICMyNCBDb2x1bW5zDQpmb3IgKGkgaW4gYygxLDYsMTEsMTYpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVhbl9hZGpbLGldLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczIgPC0gdHMoZGF0YSA9IGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuX2FkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVhbl9hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gaW52dG9zaGlwX21tdl9vcmRlcmVkX21lYW5fYWRqWyxpKzNdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczUgPC0gdHMoZGF0YSA9IGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuX2FkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyhpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVhbl9hZGopW2ldLGNvbG5hbWVzKGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuX2FkailbaSsxXSxjb2xuYW1lcyhpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVhbl9hZGopW2krMl0sY29sbmFtZXMoaW52dG9zaGlwX21tdl9vcmRlcmVkX21lYW5fYWRqKVtpKzNdLGNvbG5hbWVzKGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuX2FkailbaSs0XSksIGNvbCA9IGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIiksIGx0eT1jKDE6NCkpDQp9DQpgYGANCmBgYHtyfQ0KZm9yIChpIGluIGMoMSw2LDExLDE2KSkNCnsNCiAgU2VyaWVzMSA8LSB0cyhkYXRhID0gaW52dG9zaGlwX21tdl9vcmRlcmVkX21lYW5fdW5hZGpbLGldLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczIgPC0gdHMoZGF0YSA9IGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuX3VuYWRqWyxpKzFdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczMgPC0gdHMoZGF0YSA9IGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuX3VuYWRqWyxpKzJdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczQgPC0gdHMoZGF0YSA9IGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuX3VuYWRqWyxpKzNdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczUgPC0gdHMoZGF0YSA9IGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuX3VuYWRqWyxpKzRdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIHRzLnBsb3QoU2VyaWVzMSwgU2VyaWVzMiwgU2VyaWVzMywgU2VyaWVzNCwgU2VyaWVzNSwgZ3BhcnM9bGlzdCh4bGFiPSJZZWFyIiwgeWxhYj0iVmFsdWUiLGx0eT1jKDE6NSkpLCBjb2w9cmVwKGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIikpKQ0KICBsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjKGNvbG5hbWVzKGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuX3VuYWRqKVtpXSxjb2xuYW1lcyhpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVhbl91bmFkailbaSsxXSxjb2xuYW1lcyhpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVhbl91bmFkailbaSsyXSxjb2xuYW1lcyhpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVhbl91bmFkailbaSszXSxjb2xuYW1lcyhpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVhbl91bmFkailbaSs0XSksIGNvbCA9IGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIiksIGx0eT1jKDE6NCkpDQp9DQpgYGANCg0KYGBge3J9DQp1bmZpbGx0b3NoaXBfb3JkZXIgPC0gb3JkZXIoY29sTWVhbnModW5maWxsZWRvcmRlcnN0b3NoaXBtZW50c19kYXRhZnJhbWVfdGltZVtzYXBwbHkodW5maWxsZWRvcmRlcnN0b3NoaXBtZW50c19kYXRhZnJhbWVfdGltZSwgaXMubnVtZXJpYyldLG5hLnJtID0gVFJVRSkpDQp1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVhbiA8LSB1bmZpbGx0b3NoaXBfbW12ICU+JSBzZWxlY3QoYWxsX29mKHVuZmlsbHRvc2hpcF9vcmRlciksIG5jb2wodW5maWxsdG9zaGlwX21tdikpDQp1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVhbl9hZGogPC0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lYW4gJT4lIHNlbGVjdChzdGFydHNfd2l0aCgnQScpKSAjOSBDb2x1bW5zDQp1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVhbl91bmFkaiA8LSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVhbiAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCdVJykpICM5IENvbHVtbnMNCmZvciAoaSBpbiBjKDEpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVhbl9hZGpbLGldLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczIgPC0gdHMoZGF0YSA9IHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuX2FkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVhbl9hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lYW5fYWRqWyxpKzNdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczUgPC0gdHMoZGF0YSA9IHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuX2FkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyh1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVhbl9hZGopW2ldLGNvbG5hbWVzKHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuX2FkailbaSsxXSxjb2xuYW1lcyh1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVhbl9hZGopW2krMl0sY29sbmFtZXModW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lYW5fYWRqKVtpKzNdLGNvbG5hbWVzKHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuX2FkailbaSs0XSksIGNvbCA9IGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIiksIGx0eT1jKDE6NCkpDQp9DQpgYGANCmBgYHtyfQ0KZm9yIChpIGluIGMoMSkpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuX3VuYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVhbl91bmFkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVhbl91bmFkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVhbl91bmFkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVhbl91bmFkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyh1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVhbl91bmFkailbaV0sY29sbmFtZXModW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lYW5fdW5hZGopW2krMV0sY29sbmFtZXModW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lYW5fdW5hZGopW2krMl0sY29sbmFtZXModW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lYW5fdW5hZGopW2krM10sY29sbmFtZXModW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lYW5fdW5hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQpgYGB7cn0NCnNoaXBtZW50c19vcmRlcl9tZWQgPC0gb3JkZXIoY29sTWVkaWFucyhhcy5tYXRyaXgoc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lW3NhcHBseShzaGlwbWVudHNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSksbmEucm0gPSBUUlVFKSkNCnNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWRpYW4gPC0gc2hpcG1lbnRzX21tdiAlPiUgc2VsZWN0KGFsbF9vZihzaGlwbWVudHNfb3JkZXJfbWVkKSwgbmNvbChzaGlwbWVudHNfbW12KSkNCnNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWRpYW5fYWRqIDwtIHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWRpYW4gJT4lIHNlbGVjdChzdGFydHNfd2l0aCgnQScpKSAjODcgQ29sdW1ucw0Kc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lZGlhbl91bmFkaiA8LSBzaGlwbWVudHNfbW12X29yZGVyZWRfbWVkaWFuICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ1UnKSkgIzg3IENvbHVtbnMNCmZvciAoaSBpbiBjKDEsNiwxMSwxNiwyMSwyNiwzMSwzNiw0MSw0Niw1MSw1Niw2MSw2Niw3MSw3Niw4MSkpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWRpYW5fYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSBzaGlwbWVudHNfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSBzaGlwbWVudHNfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSBzaGlwbWVudHNfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSBzaGlwbWVudHNfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyhzaGlwbWVudHNfbW12X29yZGVyZWRfbWVkaWFuX2FkailbaV0sY29sbmFtZXMoc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lZGlhbl9hZGopW2krMV0sY29sbmFtZXMoc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lZGlhbl9hZGopW2krMl0sY29sbmFtZXMoc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lZGlhbl9hZGopW2krM10sY29sbmFtZXMoc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lZGlhbl9hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQpgYGB7cn0NCmZvciAoaSBpbiBjKDEsNiwxMSwxNiwyMSwyNiwzMSwzNiw0MSw0Niw1MSw1Niw2MSw2Niw3MSw3Niw4MSkpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGpbLGldLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczIgPC0gdHMoZGF0YSA9IHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lZGlhbl91bmFkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSBzaGlwbWVudHNfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqWyxpKzNdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczUgPC0gdHMoZGF0YSA9IHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXMoc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lZGlhbl91bmFkailbaV0sY29sbmFtZXMoc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lZGlhbl91bmFkailbaSsxXSxjb2xuYW1lcyhzaGlwbWVudHNfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqKVtpKzJdLGNvbG5hbWVzKHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGopW2krM10sY29sbmFtZXMoc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lZGlhbl91bmFkailbaSs0XSksIGNvbCA9IGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIiksIGx0eT1jKDE6NCkpDQp9DQpgYGANCmBgYHtyfQ0KbmV3b3JkZXJzX29yZGVyX21lZCA8LSBvcmRlcihjb2xNZWFucyhhcy5tYXRyaXgobmV3b3JkZXJzX2RhdGFmcmFtZV90aW1lW3NhcHBseShuZXdvcmRlcnNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSksbmEucm0gPSBUUlVFKSkNCm5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW4gPC0gbmV3b3JkZXJzX21tdiAlPiUgc2VsZWN0KGFsbF9vZihuZXdvcmRlcnNfb3JkZXJfbWVkKSwgbmNvbChuZXdvcmRlcnNfbW12KSkNCm5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fYWRqIDwtIG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW4gJT4lIHNlbGVjdChzdGFydHNfd2l0aCgnQScpKSAjNTIgQ29sdW1ucw0KbmV3b3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl91bmFkaiA8LSBuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ1UnKSkgIzUyIENvbHVtbnMNCmZvciAoaSBpbiBjKDEsNiwxMSwxNiwyMSwyNiwzMSwzNiw0MSw0NikpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSBuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSBuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSBuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSBuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyhuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX2FkailbaV0sY29sbmFtZXMobmV3b3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl9hZGopW2krMV0sY29sbmFtZXMobmV3b3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl9hZGopW2krMl0sY29sbmFtZXMobmV3b3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl9hZGopW2krM10sY29sbmFtZXMobmV3b3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl9hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQpgYGB7cn0NCmZvciAoaSBpbiBjKDEsNiwxMSwxNiwyMSwyNiwzMSwzNiw0MSw0NikpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGpbLGldLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczIgPC0gdHMoZGF0YSA9IG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gbmV3b3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl91bmFkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSBuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqWyxpKzNdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczUgPC0gdHMoZGF0YSA9IG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXMobmV3b3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl91bmFkailbaV0sY29sbmFtZXMobmV3b3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl91bmFkailbaSsxXSxjb2xuYW1lcyhuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqKVtpKzJdLGNvbG5hbWVzKG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGopW2krM10sY29sbmFtZXMobmV3b3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl91bmFkailbaSs0XSksIGNvbCA9IGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIiksIGx0eT1jKDE6NCkpDQp9DQpgYGANCmBgYHtyfQ0KdW5maWxsZWRvcmRlcnNfb3JkZXJfbWVkIDwtIG9yZGVyKGNvbE1lZGlhbnMoYXMubWF0cml4KHVuZmlsbGVkb3JkZXJzX2RhdGFmcmFtZV90aW1lW3NhcHBseSh1bmZpbGxlZG9yZGVyc19kYXRhZnJhbWVfdGltZSwgaXMubnVtZXJpYyldKSxuYS5ybSA9IFRSVUUpKQ0KdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuIDwtIHVuZmlsbG9yZF9tbXYgJT4lIHNlbGVjdChhbGxfb2YodW5maWxsZWRvcmRlcnNfb3JkZXJfbWVkKSwgbmNvbCh1bmZpbGxvcmRfbW12KSkNCnVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl9hZGogPC0gdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ0EnKSkgIzUwIENvbHVtbnMNCnVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl91bmFkaiA8LSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW4gJT4lIHNlbGVjdChzdGFydHNfd2l0aCgnVScpKSAjNTIgQ29sdW1ucw0KZm9yIChpIGluIGMoMSw2LDExLDE2LDIxLDI2LDMxLDM2LDQxLDQ2KSkNCnsNCiAgU2VyaWVzMSA8LSB0cyhkYXRhID0gdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMiA8LSB0cyhkYXRhID0gdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fYWRqWyxpKzJdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczQgPC0gdHMoZGF0YSA9IHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl9hZGpbLGkrM10sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNSA8LSB0cyhkYXRhID0gdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyh1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fYWRqKVtpXSxjb2xuYW1lcyh1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fYWRqKVtpKzFdLGNvbG5hbWVzKHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl9hZGopW2krMl0sY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX2FkailbaSszXSxjb2xuYW1lcyh1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fYWRqKVtpKzRdKSwgY29sID0gYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSwgbHR5PWMoMTo0KSkNCn0NCmBgYA0KYGBge3J9DQpmb3IgKGkgaW4gYygxLDYsMTEsMTYsMjEsMjYsMzEsMzYsNDEsNDYpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGpbLGldLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczIgPC0gdHMoZGF0YSA9IHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl91bmFkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqWyxpKzNdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczUgPC0gdHMoZGF0YSA9IHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl91bmFkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyh1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGopW2ldLGNvbG5hbWVzKHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl91bmFkailbaSsxXSxjb2xuYW1lcyh1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGopW2krMl0sY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqKVtpKzNdLGNvbG5hbWVzKHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl91bmFkailbaSs0XSksIGNvbCA9IGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIiksIGx0eT1jKDE6NCkpDQp9DQpgYGANCmBgYHtyfQ0KdG90YWxpbnZfb3JkZXJfbWVkIDwtIG9yZGVyKGNvbE1lZGlhbnMoYXMubWF0cml4KHRvdGFsaW52ZW50b3JpZXNfZGF0YWZyYW1lX3RpbWVbc2FwcGx5KHRvdGFsaW52ZW50b3JpZXNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSksbmEucm0gPSBUUlVFKSkNCnRvdGFsaW52X21tdl9vcmRlcmVkX21lZGlhbiA8LSB0b3RhbGludl9tbXYgJT4lIHNlbGVjdChhbGxfb2YodG90YWxpbnZfb3JkZXJfbWVkKSwgbmNvbCh0b3RhbGludl9tbXYpKQ0KdG90YWxpbnZfbW12X29yZGVyZWRfbWVkaWFuX2FkaiA8LSB0b3RhbGludl9tbXZfb3JkZXJlZF9tZWRpYW4gJT4lIHNlbGVjdChzdGFydHNfd2l0aCgnQScpKSAjMTU4IENvbHVtbnMNCnRvdGFsaW52X21tdl9vcmRlcmVkX21lZGlhbl91bmFkaiA8LSB0b3RhbGludl9tbXZfb3JkZXJlZF9tZWRpYW4gJT4lIHNlbGVjdChzdGFydHNfd2l0aCgnVScpKSAjMTU4IENvbHVtbnMNCmZvciAoaSBpbiBjKDEsNiwxMSwxNiwyMSwyNiwzMSwzNiw0MSw0Niw1MSw1Niw2MSw2Niw3MSw3Niw4MSw4Niw5MSw5NiwxMDEsMTA2LDExMSwxMTYsMTIxLDEyNiwxMzEsMTM2LDE0MSwxNDYsMTUxKSkNCnsNCiAgU2VyaWVzMSA8LSB0cyhkYXRhID0gdG90YWxpbnZfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMiA8LSB0cyhkYXRhID0gdG90YWxpbnZfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSB0b3RhbGludl9tbXZfb3JkZXJlZF9tZWRpYW5fYWRqWyxpKzJdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczQgPC0gdHMoZGF0YSA9IHRvdGFsaW52X21tdl9vcmRlcmVkX21lZGlhbl9hZGpbLGkrM10sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNSA8LSB0cyhkYXRhID0gdG90YWxpbnZfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyh0b3RhbGludl9tbXZfb3JkZXJlZF9tZWRpYW5fYWRqKVtpXSxjb2xuYW1lcyh0b3RhbGludl9tbXZfb3JkZXJlZF9tZWRpYW5fYWRqKVtpKzFdLGNvbG5hbWVzKHRvdGFsaW52X21tdl9vcmRlcmVkX21lZGlhbl9hZGopW2krMl0sY29sbmFtZXModG90YWxpbnZfbW12X29yZGVyZWRfbWVkaWFuX2FkailbaSszXSxjb2xuYW1lcyh0b3RhbGludl9tbXZfb3JkZXJlZF9tZWRpYW5fYWRqKVtpKzRdKSwgY29sID0gYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSwgbHR5PWMoMTo0KSkNCn0NCmBgYA0KYGBge3J9DQpmb3IgKGkgaW4gYygxLDYsMTEsMTYsMjEsMjYsMzEsMzYsNDEsNDYsNTEsNTYsNjEsNjYsNzEsNzYsODEsODYsOTEsOTYsMTAxLDEwNiwxMTEsMTE2LDEyMSwxMjYsMTMxLDEzNiwxNDEsMTQ2LDE1MSkpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IHRvdGFsaW52X21tdl9vcmRlcmVkX21lZGlhbl91bmFkalssaV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMiA8LSB0cyhkYXRhID0gdG90YWxpbnZfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqWyxpKzFdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczMgPC0gdHMoZGF0YSA9IHRvdGFsaW52X21tdl9vcmRlcmVkX21lZGlhbl91bmFkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSB0b3RhbGludl9tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGpbLGkrM10sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNSA8LSB0cyhkYXRhID0gdG90YWxpbnZfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqWyxpKzRdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIHRzLnBsb3QoU2VyaWVzMSwgU2VyaWVzMiwgU2VyaWVzMywgU2VyaWVzNCwgU2VyaWVzNSwgZ3BhcnM9bGlzdCh4bGFiPSJZZWFyIiwgeWxhYj0iVmFsdWUiLGx0eT1jKDE6NSkpLCBjb2w9cmVwKGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIikpKQ0KICBsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjKGNvbG5hbWVzKHRvdGFsaW52X21tdl9vcmRlcmVkX21lZGlhbl91bmFkailbaV0sY29sbmFtZXModG90YWxpbnZfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqKVtpKzFdLGNvbG5hbWVzKHRvdGFsaW52X21tdl9vcmRlcmVkX21lZGlhbl91bmFkailbaSsyXSxjb2xuYW1lcyh0b3RhbGludl9tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGopW2krM10sY29sbmFtZXModG90YWxpbnZfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqKVtpKzRdKSwgY29sID0gYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSwgbHR5PWMoMTo0KSkNCn0NCmBgYA0KYGBge3J9DQppbnZ0b3NoaXBfb3JkZXJfbWVkIDwtIG9yZGVyKGNvbE1lZGlhbnMoYXMubWF0cml4KGludmVudG9yaWVzdG9zaGlwbWVudHNfZGF0YWZyYW1lX3RpbWVbc2FwcGx5KGludmVudG9yaWVzdG9zaGlwbWVudHNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSksbmEucm0gPSBUUlVFKSkNCmludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW4gPC0gaW52dG9zaGlwX21tdiAlPiUgc2VsZWN0KGFsbF9vZihpbnZ0b3NoaXBfb3JkZXJfbWVkKSwgbmNvbChpbnZ0b3NoaXBfbW12KSkNCmludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fYWRqIDwtIGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW4gJT4lIHNlbGVjdChzdGFydHNfd2l0aCgnQScpKSAjMjQgQ29sdW1ucw0KaW52dG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl91bmFkaiA8LSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ1UnKSkgIzI0IENvbHVtbnMNCmZvciAoaSBpbiBjKDEsNiwxMSwxNikpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyhpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX2FkailbaV0sY29sbmFtZXMoaW52dG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl9hZGopW2krMV0sY29sbmFtZXMoaW52dG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl9hZGopW2krMl0sY29sbmFtZXMoaW52dG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl9hZGopW2krM10sY29sbmFtZXMoaW52dG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl9hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQpgYGB7cn0NCmZvciAoaSBpbiBjKDEsNiwxMSwxNikpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGpbLGldLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczIgPC0gdHMoZGF0YSA9IGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gaW52dG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl91bmFkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqWyxpKzNdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczUgPC0gdHMoZGF0YSA9IGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXMoaW52dG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl91bmFkailbaV0sY29sbmFtZXMoaW52dG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl91bmFkailbaSsxXSxjb2xuYW1lcyhpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqKVtpKzJdLGNvbG5hbWVzKGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGopW2krM10sY29sbmFtZXMoaW52dG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl91bmFkailbaSs0XSksIGNvbCA9IGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIiksIGx0eT1jKDE6NCkpDQp9DQpgYGANCmBgYHtyfQ0KdW5maWxsdG9zaGlwX29yZGVyX21lZCA8LSBvcmRlcihjb2xNZWRpYW5zKGFzLm1hdHJpeCh1bmZpbGxlZG9yZGVyc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lW3NhcHBseSh1bmZpbGxlZG9yZGVyc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lLCBpcy5udW1lcmljKV0pLG5hLnJtID0gVFJVRSkpDQp1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuIDwtIHVuZmlsbHRvc2hpcF9tbXYgJT4lIHNlbGVjdChhbGxfb2YodW5maWxsdG9zaGlwX29yZGVyX21lZCksIG5jb2wodW5maWxsdG9zaGlwX21tdikpDQp1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX2FkaiA8LSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ0EnKSkgIzkgQ29sdW1ucw0KdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl91bmFkaiA8LSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ1UnKSkgIzkgQ29sdW1ucw0KZm9yIChpIGluIGMoMSkpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyh1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX2FkailbaV0sY29sbmFtZXModW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl9hZGopW2krMV0sY29sbmFtZXModW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl9hZGopW2krMl0sY29sbmFtZXModW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl9hZGopW2krM10sY29sbmFtZXModW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl9hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQpgYGB7cn0NCmZvciAoaSBpbiBjKDEpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqWyxpKzFdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczMgPC0gdHMoZGF0YSA9IHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl91bmFkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqWyxpKzRdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIHRzLnBsb3QoU2VyaWVzMSwgU2VyaWVzMiwgU2VyaWVzMywgU2VyaWVzNCwgU2VyaWVzNSwgZ3BhcnM9bGlzdCh4bGFiPSJZZWFyIiwgeWxhYj0iVmFsdWUiLGx0eT1jKDE6NSkpLCBjb2w9cmVwKGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIikpKQ0KICBsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjKGNvbG5hbWVzKHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGopW2ldLGNvbG5hbWVzKHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGopW2krMV0sY29sbmFtZXModW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl91bmFkailbaSsyXSxjb2xuYW1lcyh1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqKVtpKzNdLGNvbG5hbWVzKHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQpgYGB7cn0NCnNoaXBtZW50c19vcmRlcl9zZCA8LSBvcmRlcihjb2xTZHMoYXMubWF0cml4KHNoaXBtZW50c19kYXRhZnJhbWVfdGltZVtzYXBwbHkoc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lLCBpcy5udW1lcmljKV0pLG5hLnJtID0gVFJVRSkpDQpzaGlwbWVudHNfbW12X29yZGVyZWRfc3RhbmRldiA8LSBzaGlwbWVudHNfbW12ICU+JSBzZWxlY3QoYWxsX29mKHNoaXBtZW50c19vcmRlcl9zZCksIG5jb2woc2hpcG1lbnRzX21tdikpDQpzaGlwbWVudHNfbW12X29yZGVyZWRfc3RhbmRldl9hZGogPC0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX3N0YW5kZXYgJT4lIHNlbGVjdChzdGFydHNfd2l0aCgnQScpKSAjOSBDb2x1bW5zDQpzaGlwbWVudHNfbW12X29yZGVyZWRfc3RhbmRldl91bmFkaiA8LSBzaGlwbWVudHNfbW12X29yZGVyZWRfc3RhbmRldiAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCdVJykpICM5IENvbHVtbnMNCmZvciAoaSBpbiBjKDEsNiwxMSwxNiwyMSwyNiwzMSwzNiw0MSw0Niw1MSw1Niw2MSw2Niw3MSw3Niw4MSkpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IHNoaXBtZW50c19tbXZfb3JkZXJlZF9zdGFuZGV2X2FkalssaV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMiA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqWyxpKzFdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczMgPC0gdHMoZGF0YSA9IHNoaXBtZW50c19tbXZfb3JkZXJlZF9zdGFuZGV2X2FkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSBzaGlwbWVudHNfbW12X29yZGVyZWRfc3RhbmRldl9hZGpbLGkrM10sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNSA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqWyxpKzRdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIHRzLnBsb3QoU2VyaWVzMSwgU2VyaWVzMiwgU2VyaWVzMywgU2VyaWVzNCwgU2VyaWVzNSwgZ3BhcnM9bGlzdCh4bGFiPSJZZWFyIiwgeWxhYj0iVmFsdWUiLGx0eT1jKDE6NSkpLCBjb2w9cmVwKGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIikpKQ0KICBsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjKGNvbG5hbWVzKHNoaXBtZW50c19tbXZfb3JkZXJlZF9zdGFuZGV2X2FkailbaV0sY29sbmFtZXMoc2hpcG1lbnRzX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqKVtpKzFdLGNvbG5hbWVzKHNoaXBtZW50c19tbXZfb3JkZXJlZF9zdGFuZGV2X2FkailbaSsyXSxjb2xuYW1lcyhzaGlwbWVudHNfbW12X29yZGVyZWRfc3RhbmRldl9hZGopW2krM10sY29sbmFtZXMoc2hpcG1lbnRzX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqKVtpKzRdKSwgY29sID0gYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSwgbHR5PWMoMTo0KSkNCn0NCmBgYA0KYGBge3J9DQpmb3IgKGkgaW4gYygxLDYsMTEsMTYsMjEsMjYsMzEsMzYsNDEsNDYsNTEsNTYsNjEsNjYsNzEsNzYsODEpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSBzaGlwbWVudHNfbW12X29yZGVyZWRfc3RhbmRldl91bmFkalssaV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMiA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGkrM10sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNSA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXMoc2hpcG1lbnRzX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGopW2ldLGNvbG5hbWVzKHNoaXBtZW50c19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqKVtpKzFdLGNvbG5hbWVzKHNoaXBtZW50c19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqKVtpKzJdLGNvbG5hbWVzKHNoaXBtZW50c19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqKVtpKzNdLGNvbG5hbWVzKHNoaXBtZW50c19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqKVtpKzRdKSwgY29sID0gYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSwgbHR5PWMoMTo0KSkNCn0NCmBgYA0KYGBge3J9DQpuZXdvcmRlcnNfb3JkZXJfc2QgPC0gb3JkZXIoY29sU2RzKGFzLm1hdHJpeChuZXdvcmRlcnNfZGF0YWZyYW1lX3RpbWVbc2FwcGx5KG5ld29yZGVyc19kYXRhZnJhbWVfdGltZSwgaXMubnVtZXJpYyldKSxuYS5ybSA9IFRSVUUpKQ0KbmV3b3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXYgPC0gbmV3b3JkZXJzX21tdiAlPiUgc2VsZWN0KGFsbF9vZihuZXdvcmRlcnNfb3JkZXJfc2QpLCBuY29sKG5ld29yZGVyc19tbXYpKQ0KbmV3b3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqIDwtIG5ld29yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2ICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ0EnKSkgIzUyIENvbHVtbnMNCm5ld29yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqIDwtIG5ld29yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2ICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ1UnKSkgIzUyIENvbHVtbnMNCmZvciAoaSBpbiBjKDEsNiwxMSwxNiwyMSwyNiwzMSwzNiw0MSw0NikpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IG5ld29yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X2FkalssaV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMiA8LSB0cyhkYXRhID0gbmV3b3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqWyxpKzFdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczMgPC0gdHMoZGF0YSA9IG5ld29yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X2FkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSBuZXdvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl9hZGpbLGkrM10sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNSA8LSB0cyhkYXRhID0gbmV3b3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqWyxpKzRdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIHRzLnBsb3QoU2VyaWVzMSwgU2VyaWVzMiwgU2VyaWVzMywgU2VyaWVzNCwgU2VyaWVzNSwgZ3BhcnM9bGlzdCh4bGFiPSJZZWFyIiwgeWxhYj0iVmFsdWUiLGx0eT1jKDE6NSkpLCBjb2w9cmVwKGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIikpKQ0KICBsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjKGNvbG5hbWVzKG5ld29yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X2FkailbaV0sY29sbmFtZXMobmV3b3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqKVtpKzFdLGNvbG5hbWVzKG5ld29yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X2FkailbaSsyXSxjb2xuYW1lcyhuZXdvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl9hZGopW2krM10sY29sbmFtZXMobmV3b3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqKVtpKzRdKSwgY29sID0gYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSwgbHR5PWMoMTo0KSkNCn0NCmBgYA0KYGBge3J9DQpmb3IgKGkgaW4gYygxLDYsMTEsMTYsMjEsMjYsMzEsMzYsNDEsNDYpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSBuZXdvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl91bmFkalssaV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMiA8LSB0cyhkYXRhID0gbmV3b3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gbmV3b3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gbmV3b3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGkrM10sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNSA8LSB0cyhkYXRhID0gbmV3b3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXMobmV3b3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGopW2ldLGNvbG5hbWVzKG5ld29yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqKVtpKzFdLGNvbG5hbWVzKG5ld29yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqKVtpKzJdLGNvbG5hbWVzKG5ld29yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqKVtpKzNdLGNvbG5hbWVzKG5ld29yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqKVtpKzRdKSwgY29sID0gYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSwgbHR5PWMoMTo0KSkNCn0NCmBgYA0KYGBge3J9DQp1bmZpbGxlZG9yZGVyc19vcmRlcl9zZCA8LSBvcmRlcihjb2xTZHMoYXMubWF0cml4KHVuZmlsbGVkb3JkZXJzX2RhdGFmcmFtZV90aW1lW3NhcHBseSh1bmZpbGxlZG9yZGVyc19kYXRhZnJhbWVfdGltZSwgaXMubnVtZXJpYyldKSxuYS5ybSA9IFRSVUUpKQ0KdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldiA8LSB1bmZpbGxvcmRfbW12ICU+JSBzZWxlY3QoYWxsX29mKHVuZmlsbGVkb3JkZXJzX29yZGVyX3NkKSwgbmNvbCh1bmZpbGxvcmRfbW12KSkNCnVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqIDwtIHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXYgJT4lIHNlbGVjdChzdGFydHNfd2l0aCgnQScpKSAjNTAgQ29sdW1ucw0KdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl91bmFkaiA8LSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2ICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ1UnKSkgIzUyIENvbHVtbnMNCmZvciAoaSBpbiBjKDEsNiwxMSwxNiwyMSwyNiwzMSwzNiw0MSw0NikpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X2FkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X2FkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X2FkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X2FkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyh1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X2FkailbaV0sY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl9hZGopW2krMV0sY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl9hZGopW2krMl0sY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl9hZGopW2krM10sY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl9hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQpgYGB7cn0NCmZvciAoaSBpbiBjKDEsNiwxMSwxNiwyMSwyNiwzMSwzNiw0MSw0NikpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGldLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczIgPC0gdHMoZGF0YSA9IHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl91bmFkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqWyxpKzNdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczUgPC0gdHMoZGF0YSA9IHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl91bmFkailbaV0sY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl91bmFkailbaSsxXSxjb2xuYW1lcyh1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqKVtpKzJdLGNvbG5hbWVzKHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGopW2krM10sY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl91bmFkailbaSs0XSksIGNvbCA9IGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIiksIGx0eT1jKDE6NCkpDQp9DQpgYGANCmBgYHtyfQ0KdG90YWxpbnZfb3JkZXJfc2QgPC0gb3JkZXIoY29sU2RzKGFzLm1hdHJpeCh0b3RhbGludmVudG9yaWVzX2RhdGFmcmFtZV90aW1lW3NhcHBseSh0b3RhbGludmVudG9yaWVzX2RhdGFmcmFtZV90aW1lLCBpcy5udW1lcmljKV0pLG5hLnJtID0gVFJVRSkpDQp0b3RhbGludl9tbXZfb3JkZXJlZF9zdGFuZGV2IDwtIHRvdGFsaW52X21tdiAlPiUgc2VsZWN0KGFsbF9vZih0b3RhbGludl9vcmRlcl9zZCksIG5jb2wodG90YWxpbnZfbW12KSkNCnRvdGFsaW52X21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqIDwtIHRvdGFsaW52X21tdl9vcmRlcmVkX3N0YW5kZXYgJT4lIHNlbGVjdChzdGFydHNfd2l0aCgnQScpKSAjMTU4IENvbHVtbnMNCnRvdGFsaW52X21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGogPC0gdG90YWxpbnZfbW12X29yZGVyZWRfc3RhbmRldiAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCdVJykpICMxNTggQ29sdW1ucw0KZm9yIChpIGluIGMoMSw2LDExLDE2LDIxLDI2LDMxLDM2LDQxLDQ2LDUxLDU2LDYxLDY2LDcxLDc2LDgxLDg2LDkxLDk2LDEwMSwxMDYsMTExLDExNiwxMjEsMTI2LDEzMSwxMzYsMTQxLDE0NiwxNTEpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSB0b3RhbGludl9tbXZfb3JkZXJlZF9zdGFuZGV2X2FkalssaV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMiA8LSB0cyhkYXRhID0gdG90YWxpbnZfbW12X29yZGVyZWRfc3RhbmRldl9hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gdG90YWxpbnZfbW12X29yZGVyZWRfc3RhbmRldl9hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gdG90YWxpbnZfbW12X29yZGVyZWRfc3RhbmRldl9hZGpbLGkrM10sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNSA8LSB0cyhkYXRhID0gdG90YWxpbnZfbW12X29yZGVyZWRfc3RhbmRldl9hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXModG90YWxpbnZfbW12X29yZGVyZWRfc3RhbmRldl9hZGopW2ldLGNvbG5hbWVzKHRvdGFsaW52X21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqKVtpKzFdLGNvbG5hbWVzKHRvdGFsaW52X21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqKVtpKzJdLGNvbG5hbWVzKHRvdGFsaW52X21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqKVtpKzNdLGNvbG5hbWVzKHRvdGFsaW52X21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqKVtpKzRdKSwgY29sID0gYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSwgbHR5PWMoMTo0KSkNCn0NCmBgYA0KYGBge3J9DQpmb3IgKGkgaW4gYygxLDYsMTEsMTYsMjEsMjYsMzEsMzYsNDEsNDYsNTEsNTYsNjEsNjYsNzEsNzYsODEsODYsOTEsOTYsMTAxLDEwNiwxMTEsMTE2LDEyMSwxMjYsMTMxLDEzNiwxNDEsMTQ2LDE1MSkpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IHRvdGFsaW52X21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGldLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczIgPC0gdHMoZGF0YSA9IHRvdGFsaW52X21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gdG90YWxpbnZfbW12X29yZGVyZWRfc3RhbmRldl91bmFkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSB0b3RhbGludl9tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqWyxpKzNdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczUgPC0gdHMoZGF0YSA9IHRvdGFsaW52X21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXModG90YWxpbnZfbW12X29yZGVyZWRfc3RhbmRldl91bmFkailbaV0sY29sbmFtZXModG90YWxpbnZfbW12X29yZGVyZWRfc3RhbmRldl91bmFkailbaSsxXSxjb2xuYW1lcyh0b3RhbGludl9tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqKVtpKzJdLGNvbG5hbWVzKHRvdGFsaW52X21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGopW2krM10sY29sbmFtZXModG90YWxpbnZfbW12X29yZGVyZWRfc3RhbmRldl91bmFkailbaSs0XSksIGNvbCA9IGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIiksIGx0eT1jKDE6NCkpDQp9DQpgYGANCmBgYHtyfQ0KaW52dG9zaGlwX29yZGVyX3NkIDwtIG9yZGVyKGNvbFNkcyhhcy5tYXRyaXgoaW52ZW50b3JpZXN0b3NoaXBtZW50c19kYXRhZnJhbWVfdGltZVtzYXBwbHkoaW52ZW50b3JpZXN0b3NoaXBtZW50c19kYXRhZnJhbWVfdGltZSwgaXMubnVtZXJpYyldKSxuYS5ybSA9IFRSVUUpKQ0KaW52dG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXYgPC0gaW52dG9zaGlwX21tdiAlPiUgc2VsZWN0KGFsbF9vZihpbnZ0b3NoaXBfb3JkZXJfc2QpLCBuY29sKGludnRvc2hpcF9tbXYpKQ0KaW52dG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqIDwtIGludnRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2ICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ0EnKSkgIzI0IENvbHVtbnMNCmludnRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqIDwtIGludnRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2ICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ1UnKSkgIzI0IENvbHVtbnMNCmZvciAoaSBpbiBjKDEsNiwxMSwxNikpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IGludnRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X2FkalssaV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMiA8LSB0cyhkYXRhID0gaW52dG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqWyxpKzFdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczMgPC0gdHMoZGF0YSA9IGludnRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X2FkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl9hZGpbLGkrM10sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNSA8LSB0cyhkYXRhID0gaW52dG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqWyxpKzRdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIHRzLnBsb3QoU2VyaWVzMSwgU2VyaWVzMiwgU2VyaWVzMywgU2VyaWVzNCwgU2VyaWVzNSwgZ3BhcnM9bGlzdCh4bGFiPSJZZWFyIiwgeWxhYj0iVmFsdWUiLGx0eT1jKDE6NSkpLCBjb2w9cmVwKGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIikpKQ0KICBsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjKGNvbG5hbWVzKGludnRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X2FkailbaV0sY29sbmFtZXMoaW52dG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqKVtpKzFdLGNvbG5hbWVzKGludnRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X2FkailbaSsyXSxjb2xuYW1lcyhpbnZ0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl9hZGopW2krM10sY29sbmFtZXMoaW52dG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqKVtpKzRdKSwgY29sID0gYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSwgbHR5PWMoMTo0KSkNCn0NCmBgYA0KYGBge3J9DQpmb3IgKGkgaW4gYygxLDYsMTEsMTYpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl91bmFkalssaV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMiA8LSB0cyhkYXRhID0gaW52dG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gaW52dG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gaW52dG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGkrM10sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNSA8LSB0cyhkYXRhID0gaW52dG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXMoaW52dG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGopW2ldLGNvbG5hbWVzKGludnRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqKVtpKzFdLGNvbG5hbWVzKGludnRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqKVtpKzJdLGNvbG5hbWVzKGludnRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqKVtpKzNdLGNvbG5hbWVzKGludnRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqKVtpKzRdKSwgY29sID0gYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSwgbHR5PWMoMTo0KSkNCn0NCmBgYA0KYGBge3J9DQp1bmZpbGx0b3NoaXBfb3JkZXJfc2QgPC0gb3JkZXIoY29sU2RzKGFzLm1hdHJpeCh1bmZpbGxlZG9yZGVyc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lW3NhcHBseSh1bmZpbGxlZG9yZGVyc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lLCBpcy5udW1lcmljKV0pLG5hLnJtID0gVFJVRSkpDQp1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldiA8LSB1bmZpbGx0b3NoaXBfbW12ICU+JSBzZWxlY3QoYWxsX29mKHVuZmlsbHRvc2hpcF9vcmRlcl9zZCksIG5jb2wodW5maWxsdG9zaGlwX21tdikpDQp1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl9hZGogPC0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXYgJT4lIHNlbGVjdChzdGFydHNfd2l0aCgnQScpKSAjOSBDb2x1bW5zDQp1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl91bmFkaiA8LSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldiAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCdVJykpICM5IENvbHVtbnMNCmZvciAoaSBpbiBjKDEpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl9hZGpbLGldLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczIgPC0gdHMoZGF0YSA9IHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X2FkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl9hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqWyxpKzNdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczUgPC0gdHMoZGF0YSA9IHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X2FkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyh1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl9hZGopW2ldLGNvbG5hbWVzKHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X2FkailbaSsxXSxjb2xuYW1lcyh1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl9hZGopW2krMl0sY29sbmFtZXModW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqKVtpKzNdLGNvbG5hbWVzKHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X2FkailbaSs0XSksIGNvbCA9IGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIiksIGx0eT1jKDE6NCkpDQp9DQpgYGANCmBgYHtyfQ0KZm9yIChpIGluIGMoMSkpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl91bmFkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl91bmFkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl91bmFkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl91bmFkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyh1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl91bmFkailbaV0sY29sbmFtZXModW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGopW2krMV0sY29sbmFtZXModW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGopW2krMl0sY29sbmFtZXModW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGopW2krM10sY29sbmFtZXModW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQoNCg0K